前言:
乙個consumer group中有多個consumer,乙個topic有多個partition,所以必然會涉及到partition的分配問題,即確定那個partition由哪個consumer來消費。
kafka有兩種分配策略,一是roundrobin,二是range
1. roundrobin
roundrobin意為「輪循」,假設有乙個消費者組,裡面有a和b兩個消費者。a和b同時訂閱了topic t1 和 t2,topic t1 和 t2分別有3個分割槽,由於乙個分割槽只能由乙個消費者消費,那a和b應該分別消費那個主題的那個分割槽呢?
1.1 roundrobin的分配方式
1.2 roundrobin分配再說明
假設上面topic t1 和 t2的分割槽總共有五個,那麼結果就是a會比b多消費乙個分割槽或者b比a多消費乙個分割槽,所以roundrobin這種分配方式最多會導致消費者消費的分割槽數相差乙個。
這種分配方式某些情況下可能適合:
假設有兩個topic t1、t2,每個topic都有三個分割槽,然後a訂閱了topic t1,b訂閱了topic t2。可是roundrobin是按照組來分配的,它依然會先將所有分割槽排序,然後逐個分給a和b兩個消費者,這可能就會導致t2的分割槽分給了a,而t1的分割槽分給了b。可是a沒有訂閱t2,b也沒有訂閱t1,所以邏輯混亂。
結論:要想使用roundrobin分配方式要保證乙個消費者組內的所有消費者訂閱的是相同的topic。
2. range
range意為「範圍」,是kafka預設的分配方式。假設有乙個消費者組,裡面有a和b兩個消費者。a和b同時訂閱了topic t1 和 t2,topic t1 和 t2分別有3個分割槽,由於乙個分割槽只能由乙個消費者消費,那a和b應該分別消費那個主題的那個分割槽呢?
2.1 range的分配方式
2.2 range分配方式的再說明
上面的例子的分配結果是a負責有四個分割槽而b只負責有兩個分割槽,a和b負責分割槽相差兩個,隨著訂閱的topic增多a和b負責的分割槽數相差會越來越大。但是如果a只訂閱了t1,b只訂閱了t2,那麼t1的分割槽都會分給a而t2的分割槽都會分給b,就不會出現roundrobin裡面的那種邏輯混亂。
3. 分配方式的觸發條件
當消費者組增加或減少消費者時就會觸發分配機制進行重新分配。
kafka的分割槽分配策略
將所有broker n個 和partition排序 將第i個partition分配到第 i mode n 個broker上 當key為空時,訊息隨機傳送到各個分割槽 各個版本會有不同,有的是採用輪詢的方式,有的是隨機,有的是一定時間內只傳送給固定partition,隔一段時間後隨機換乙個 用key的...
Kafka的分割槽分配策略
用過 kafka 的同學應該都知道,每個 topic 一般會有很多個 partitions。為了使得我們能夠及時消費訊息,我們也可能會啟動多個 consumer 去消費,而每個 consumer 又會啟動乙個或多個streams去分別消費 topic 對應分割槽中的資料。我們又知道,kafka 存在...
kafka 訊息的分割槽分配策略
訊息的消費原理 觸發分割槽分配策略的條件 topic 在kafka 中,topic是乙個儲存訊息的邏輯概念,可以認為是乙個訊息的集合。每條訊息傳送到 kafka 集群的訊息都有乙個類別。每個topic可以有多個生產者向他傳送訊息,也可以有多個消費者去消費訊息 partition 每個topic 可以...