1. 程式人生 > 其它 >Kafka consumer rebalance

Kafka consumer rebalance

1. kafkarebalance

rebalance是針對consumer group來說的。consumer group中有多個consumers,當在服務啟動階段,或者新的consumer建立,或者已有consumer宕機,或者parttion變化的情況下會出現rebalance,使得consumers重新分配parittions

如上圖,kafka 怎麼均勻地分配某個 topic 下的所有 partition 到各個消費者,從而使得訊息的消費速度達到最快,這就是平衡(balance)。而 rebalance(重平衡)其實就是重新進行 partition 的分配,從而使得 partition 的分配重新達到平衡狀態

2. Reblance 流程:

協調者:

Group Coordinator是一個服務,每個Broker在啟動的時候都會啟動一個該服務。Group Coordinator的作用是用來儲存Group的相關Meta資訊,並將對應PartitionOffset資訊記錄到Kafka。

JoinGroup請求 加入consumer group請求

Join 顧名思義就是加入組。這一步中,所有成員都向coordinator傳送JoinGroup請求,請求加入消費組。一旦所有成員都發送了JoinGroup請求,coordinator會從中選擇一個consumer擔任leader的角色,並把組成員資訊以及訂閱資訊發給leader,注意leader和coordinator不是一個概念。leader負責消費分配方案的制定

SyncGroup 請求 分配partition

Join 顧名思義就是加入組。這一步中,所有成員都向coordinator傳送JoinGroup請求,請求加入消費組。一旦所有成員都發送了JoinGroup請求,coordinator會從中選擇一個consumer擔任leader的角色,並把組成員資訊以及訂閱資訊發給leader——注意leader和coordinator不是一個概念。leader負責消費分配方案的制定

3. 避免非必要reblance

控制好consumer向協調者傳送心跳頻率

當 Consumer Group 完成 Rebalance 之後,每個 Consumer 例項都會定期(heartbeat.interval.ms設定)地向 Coordinator 傳送心跳請求,表明它還存活著。heartbeat.interval.m這個值設定得越小,Consumer 例項傳送心跳請求的頻率就越高

控制好consumer從kafka拉資料時間

max.poll.interval.ms 用於控制 Consumer 實際消費能力對 Rebalance 的影響。它限定了 Consumer 端應用程式兩次呼叫 poll 方法的最大時間間隔。它的預設值是 5 分鐘,表示你的 Consumer 程式如果在 5 分鐘之內無法消費完 poll 方法返回的訊息,那麼 Consumer 會主動發起 “離開組” 的請求,Coordinator 也會開啟新一輪 Rebalance

參考:https://www.pianshen.com/article/33431076149/

https://www.cnblogs.com/chanshuyi/p/kafka_rebalance_quick_guide.html