kafka 原理分析

2021-10-04 21:40:40 字數 2064 閱讀 5377

partition是以檔案的形式儲存在檔案系統中,比如建立乙個名為firsttopic的topic,其中有3個 partition,那麼在kafka的資料目錄(/tmp/kafka-log)中就有3個目錄,firsttopic-0~3, 命名規則是 -

sh kafka-topics.sh --create --zookeeper 192.168.11.156:2181 --replication-factor 1 --partitions 3 --topic firsttopic

.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic firsttopic

kafka consuemr的rebalance機制規定了乙個consumer group下的所有consumer如何達成一致來分 配訂閱topic的每個分割槽。而kafka 對於分配策略這塊,提供了可插拔的實現方式, 也就是說我們可以建立自己的分配機制

c1-0 將消費 0, 1, 2, 3 分割槽

c2-0 將消費 4, 5, 6 分割槽

c3-0 將消費 7, 8, 9 分割槽

c1-0 將消費 0, 1, 2, 3 分割槽

c2-0 將消費 4, 5, 6, 7 分割槽

c3-0 將消費 8, 9, 10 分割槽

c1-0 將消費 t1主題的 0, 1, 2, 3 分割槽以及 t2主題的 0, 1, 2, 3分割槽

c2-0 將消費 t1主題的 4, 5, 6 分割槽以及 t2主題的 4, 5, 6分割槽

c3-0 將消費 t1主題的 7, 8, 9 分割槽以及 t2主題的 7, 8, 9分割槽

c1-0 將消費 t1-5, t1-2, t1-6 分割槽;

c1-1 將消費 t1-3, t1-1, t1-9 分割槽;

c1-3 將消費 t1-0, t1-4 分割槽;

c1-4 將消費 t1-8, t1-7 分割槽; 

其中順序為c1-0消費t1-5、

當兩者發生衝突時, 第 一 個目標優先於第二個目標。 鑑於這兩個目標, stickyassignor分配策略的具 體實現要比rangeassignor和roundrobinassi gn or這兩種分配策略要複雜得多,假設我們有這樣乙個 場景

假設消費組有3個消費者:c0,c1,c2,

它們分別訂閱了4個topic(t0,t1,t2,t3),並且每個主題有兩個分 區(p0,p1),

也就是說,整個消費組訂閱了8個分割槽:topo 、 topl 、 tlpo 、 tlpl 、 t2p0 、 t2pl 、t3p0 、 t3pl

那麼最終的分配場景結果為

這種分配方式有點類似於輪詢策略,但實際上並不是,因為假設這個時候,c1這個消費者掛了,就勢必會造成 重新分割槽(reblance),如果是輪詢,那麼結果應該是

c0: t0p0、t1p0、t2p0、t3p0

c2: t0p1、t1p1、t2p1、t3p1 

然後,strickyassignor它是一種粘滯策略,所以它會滿足`分割槽的分配盡可能和上次分配保持相同`,所以 分配結果應該是

消費者c0: t0p0、t1p1、t3p0、t2p0

消費者c2: t1p0、t2p1、t0p1、t3p1 

也就是說,c0和c2保留了上一次是的分配結果,並且把原來c1的分割槽分配給了c0和c2。 這種策略的好處是 使得分割槽發生變化時,由於分割槽的「粘性,減少了不必要的分割槽移動 

kafka提供了乙個角色:coordinator來執行對於consumer group的管理,kafka提供了乙個角色: coordinator來執行對於consumer group的管理,當consumer group的第乙個consumer啟動的時 候,它會去和kafka server確定誰是它們組的coordinator。之後該group內的所有成員都會和該 coordinator進行協調通訊

consumer group如何確定自己的coordinator是誰呢, 消費者向kafka集群中的任意乙個broker傳送乙個 groupcoordinatorrequest請求,服務端會返回乙個負載最小的broker節點的id,並將該broker設定 為coordinator

kafka原理分析

kafka為什麼有高吞吐量 1 由於接收資料時可以設定request.required.acks引數,一般設定為1或者0,即生產者傳送訊息0代表不關心kafka是否接收成功,也就是關閉ack 1代表kafka端leader角色的patation 多個patation,並且每個會有多個副本 接收到資料...

KAFKA原理簡介

每條訊息在檔案中的位置成為offset 偏移量 offset為long型數字。過後無論是否被消費,都會被清楚。consumer儲存消費資訊的offset。kafka通過partition將日誌內容分散到多個server上,每個partition都會被 當前server儲存,kafka可以配置part...

Kafka複製原理

每個主題都有多個分割槽 每個分割槽都會有自己的多個副本 每個分割槽與自己的副本之間都會有乙個leader 同一主題下的不同分割槽包含的訊息不同 同一條訊息不會出現在多個分割槽中 由於訊息是以可追加的log日誌儲存到分割槽中的,多個分割槽順序寫磁碟的總效率要比隨機寫記憶體還要高 訊息被追加到分割槽日誌...