日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Kafka里面的信息是如何被消費的?

Kafka 里面的信息是如何被消費的?

作者:kingname 2019-12-16 09:37:19

開發(fā)

架構(gòu)

Kafka 作為一個爬蟲工程師,Kafka 對你而言就是一個消息隊列,你只需要掌握如何向里面寫入數(shù)據(jù),以及如何讀取數(shù)據(jù)就可以了。

濟水街道網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司從2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司

 作為一個爬蟲工程師,Kafka 對你而言就是一個消息隊列,你只需要掌握如何向里面寫入數(shù)據(jù),以及如何讀取數(shù)據(jù)就可以了。

請謹記:使用 Kafka 很容易,但對 Kafka 集群進行搭建、維護與調(diào)優(yōu)很麻煩。Kafka 集群需要有專人來維護,不要以為你能輕易勝任這個工作?!北疚模约敖酉聛淼膸灼槍?Kafka 的文章,我們面向的對象都是爬蟲工程師或者僅僅需要使用 Kafka 的讀者。關(guān)于 Kafka 更深入的底層細節(jié)與核心原理,不在我們的討論范圍中。為了解釋方便,文章中對 Kafka 的一些術(shù)語會使用一些不太準確但能表明意思的類比。如果你需要在面試中解釋這些術(shù)語,還請閱讀Kafka 的官方文檔。

今天我們要討論的一個話題是,Kafka 是如何做到,對單個程序的多個進程而言,能持續(xù)消費,斷點續(xù)傳和并行消費;對多個程序而言又互不影響,各自獨立。

一個 Kafka 可以有多個不同的隊列,我們把這個隊列叫做Topic,假設(shè)其中一個隊列如下圖所示:

信息從右邊進去,從左邊出來。如果這是Redis 的列表,那么它彈出一條信息以后,隊列會變成下面這樣:

最左邊的信息1不見了。所以即使程序在消費了信息1后立刻關(guān)閉,再重新打開,程序也會接著從信息2開始消費,不會把信息1重復消費兩次。

但我如果有兩個程序呢?程序1讀取每一條數(shù)據(jù),再轉(zhuǎn)存到數(shù)據(jù)庫。程序2讀取每一條數(shù)據(jù),再檢查是否有關(guān)鍵詞。這種情況下,信息1應該能被程序1消費,也能被程序2消費。但上面這種方案顯然是不行的。當程序1消費了信息1,程序2就再也拿不到它了。

所以,在 Kafka 里面,信息會停留在隊列里面,但對每一個程序來說,有一個單獨的記號,來記錄當前消費到了哪一條數(shù)據(jù),如下圖所示。

當程序1要讀取 Kafka 里面下一條數(shù)據(jù)時,Kafka 先把當前位置的標記向右移動一位,把新的這個值返回出來。標記移動與返回這兩個操作合在一起算是一個原子操作,不會出現(xiàn)重復讀取的問題。

程序1與程序2使用的是不同的標記,所以各自的標記指向哪個值,是互不影響的。

當增加一個程序3的時候,只需要再加一個標記即可。新的這個標記也不受前兩個標記的影響。

這就實現(xiàn)了在多個不同的程序讀取 Kafka 時,各自互不影響。

現(xiàn)在如果你覺得程序1消費太慢了,把程序1同時運行了3次,那么由于標記和移位是原子操作,即使你看起來程序是同時去讀取 Kafka,但在內(nèi)部 Kafka 也會對他們進行“排隊”,從而使得他們返回的結(jié)果不重復,不遺漏。

如果你在網(wǎng)上看 Kafka 的教程,你會發(fā)現(xiàn)他們提到了一個叫做 Offset 的東西,實際上就是本文所說的各個程序里面指向當前數(shù)據(jù)的標記。

你還會看到一個關(guān)鍵詞叫做Group,實際上對應到本文的程序1,程序2和程序3。

對同一個隊列,如果多個程序使用不同的Group消費,那么他們讀取的數(shù)據(jù)就互不干擾。

對同一個隊列,相同 Group 的多個進程在消費數(shù)據(jù)時,看起來就像是在對 Redis 進行 lpop 操作一樣。

最后,你在網(wǎng)上關(guān)于 Kafka 的文章里面,一定會看到一個詞叫做Paritition或者中文分片。而且你會發(fā)現(xiàn)你無法理解這個東西。

沒關(guān)系,忘記它吧。你只需要知道,一個 Topic 有多少個 Partition,那么你最多能啟動多少個進程讀取同一個 Group?!绻粋€Topic有3個Partition,那么你只能最多開3個進程同時讀相同的 Group。Topic如果有5個Partition,那么你只能最多開5個進程讀同一個 Group。


當前標題:Kafka里面的信息是如何被消費的?
分享網(wǎng)址:http://www.dlmjj.cn/article/dphgssd.html