kafka的分割槽分配策略

2021-08-28 02:50:25 字數 2241 閱讀 2238

將所有broker(n個)和partition排序

將第i個partition分配到第(i mode n)個broker上

當key為空時,訊息隨機傳送到各個分割槽(各個版本會有不同,有的是採用輪詢的方式,有的是隨機,有的是一定時間內只傳送給固定partition,隔一段時間後隨機換乙個)

用key的ha』sh值對partion個數取模,決定要把訊息傳送到哪個partition上

range 範圍分割槽(預設的)

假如有10個分割槽,3個消費者,把分割槽按照序號排列0,1,2,3,4,5,6,7,8,9;消費者為c1,c2,c3,那麼用分割槽數除以消費者數來決定每個consumer消費幾個partition,除不盡的前面幾個消費者將會多消費乙個

最後分配結果如下

c1:0,1,2,3

c2:4,5,6

c3:7,8,9

如果有11個分割槽將會是:

c1:0,1,2,3

c2:4,5,6,7

c3:8,9,10

假如我們有兩個主題t1,t2,分別有10個分割槽,最後的分配結果將會是這樣:

c1:t1(0,1,2,3) t2(0,1,2,3)

c2:t1(4,5,6) t2(4,5,6)

c3:t1(7,8,9) t2(7,8,9)

在這種情況下,c1多消費了兩個分割槽

roundrobin 輪詢分割槽

把所有的partition和consumer列出來,然後輪詢consumer和partition,盡可能的讓把partition均勻的分配給consumer

假如有3個topic t0(三個分割槽p0-0,p0-1,p0-2),t1(兩個分割槽p1-0,p1-1),t2(四個分割槽p2-0,p2-1,p2-2,p2-3)

有三個消費者:c0(訂閱了t0,t1),c1(訂閱了t1,t2),c2(訂閱了t0,t2)

那麼分割槽過程如下圖所示

分割槽將會按照一定的順序排列起來,消費者將會組成乙個環狀的結構,然後開始輪詢。

p0-0分配給c0

p0-1分配給c1但是c1並沒訂閱t0,於是跳過c1把p0-1分配給c2,

p0-2分配給c0

p1-0分配給c1,

p1-1分配給c0,

p2-0分配給c1,

p2-1分配給c2,

p2-2分配給c1,

p2-3分配給c2

c0: p0-0,p0-2,p1-1

c1:p1-0,p2-0,p2-2

c2:p0-1,p2-1,p2-3

什麼時候觸發分割槽分配策略:

1.同乙個consumer group內新增或減少consumer

2.topic分割槽發生變化

rebalance的執行

kafka提供了乙個角色coordinator來執行。當consumer group的第乙個consumer啟動的時候,他會向kafka集群中的任意一台broker傳送groupcoordinatorrequest請求,broker會返回乙個負載最小的broker設定為coordinator,之後該group的所有成員都會和coordinator進行協調通訊

整個rebalance分為兩個過程jiongroupsysncjion

joingroup過程

在這一步中,所有的成員都會向coordinator傳送jiongroup請求,請求內容包括group_id,member_id.protocol_metadata等,coordinator會從中選出乙個consumer作為leader,並且把組成員資訊和訂閱訊息,leader資訊,rebanlance的版本資訊傳送給consumer

synchronizing group state階段

組成員向coordinator傳送sysngrouprequet請求,但是只有leader會傳送分割槽分配的方案(分割槽分配的方案其實是在消費者確定的),當coordinator收到leader傳送的分割槽分配方案後,會通過sysngroupresponse把方案同步到各個consumer中

Kafka的分割槽分配策略

用過 kafka 的同學應該都知道,每個 topic 一般會有很多個 partitions。為了使得我們能夠及時消費訊息,我們也可能會啟動多個 consumer 去消費,而每個 consumer 又會啟動乙個或多個streams去分別消費 topic 對應分割槽中的資料。我們又知道,kafka 存在...

詳解Kafka分割槽分配策略

前言 乙個consumer group中有多個consumer,乙個topic有多個partition,所以必然會涉及到partition的分配問題,即確定那個partition由哪個consumer來消費。kafka有兩種分配策略,一是roundrobin,二是range 1.roundrobin...

kafka 訊息的分割槽分配策略

訊息的消費原理 觸發分割槽分配策略的條件 topic 在kafka 中,topic是乙個儲存訊息的邏輯概念,可以認為是乙個訊息的集合。每條訊息傳送到 kafka 集群的訊息都有乙個類別。每個topic可以有多個生產者向他傳送訊息,也可以有多個消費者去消費訊息 partition 每個topic 可以...