91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-12-15 11:57:52 來源:億速云 閱讀:106 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關Kafka 里面的信息是如何被消費的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

使用 Kafka 很容易,但對 Kafka 集群進行搭建、維護與調優很麻煩。Kafka  集群需要有專人來維護,不要以為你能輕易勝任這個工作。”下面對 Kafka  的一些術語會使用一些不太準確但能表明意思的類比。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

如果你在網上看 Kafka 的教程,你會發現他們提到了一個叫做 Offset 的東西,實際上就是本文所說的各個程序里面指向當前數據的標記。

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

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

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

最后,你在網上關于 Kafka 的文章里面,一定會看到一個詞叫做Paritition或者中文分片。而且你會發現你無法理解這個東西。

沒關系,忘記它吧。你只需要知道,一個 Topic 有多少個 Partition,那么你最多能啟動多少個進程讀取同一個  Group。

如果一個Topic有3個Partition,那么你只能最多開3個進程同時讀相同的  Group。Topic如果有5個Partition,那么你只能最多開5個進程讀同一個 Group。

看完上述內容,你們對Kafka 里面的信息是如何被消費的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彰化县| 老河口市| 若羌县| 建平县| 呼和浩特市| 云梦县| 黔江区| 丽水市| 景泰县| 阆中市| 察哈| 松原市| 鲁甸县| 盘锦市| 澄城县| 鸡东县| 白城市| 宁都县| 南靖县| 建德市| 敦化市| 朔州市| 巍山| 手机| 彭州市| 新干县| 高淳县| 长白| 万盛区| 青州市| 三江| 上栗县| 岳普湖县| 郑州市| 印江| 宁阳县| 闻喜县| 綦江县| 澜沧| 左权县| 淮滨县|