kafka rebalance

重平衡是指:對某一主題的消費組下的所有消費者,消費某一個topic下的多個leader分區,建立的消費映射關係達成一致的過程;

  • 發生時機

通常可以理解爲3個時機:
1、分區數發生變化,比如由2個partition調整爲3個partition;
2、消費者數量發生變化,比如10個消費者,調整爲9個消費者;消費者數量變化比較特殊,有可能是真實變化,比如服務真實下線,有可能是僞變化,接下來會一一到來
2.1.1、所謂‘僞下線’是指當消費端沒有遵循按照固定頻率拉取消息數據,當窗口等待週期超過最大配置時,會被認爲消費者不可用
2.1.2、‘真實下線‘是通過消費者和協調者之間的心跳維護的,當滿足session.timeout.ms >= n * heartbeat.interval.ms時,也會被認爲消費端下線
3、消費主題發生變化

  • 重平衡過程

1、獲取Coordinator節點:consumer通過對,groupId.hashcode%__consumer_offsets.partition.num(默認值50),獲得一個分區ID,找到該分區對應的副本所在server,則Coordinator即在該節點上
2、選出consumer leader:
2.1、all consumer request->join group ->Coordinator 所有的消費者向協調者發送‘編組請求’
2.2、Coordinator 從衆多consumer中選出一個節點,作爲該組的leader
2.3、Coordinator向leader節點發送‘所有消費者的信息和帶消費的topic’信息
3、消費方案上報
3.1、conumser leader上報消費方案,發送請求syncGroup至‘Coordinator’
3.2、普通conumser發送syncGroup至‘Coordinator’,server端將leader的消費方案進行response響應
4、消費端建立與消費broker間的數據通道,開始消費

  • 如何降低重平衡

重平衡的危害,當發上rebance時候,對於消費者來說整個消費集羣是停止消費的,也就是常說的STW(STOP THE WORLD),kafka有重平衡的機制,我們無法完全避免,因此從消費端的吞吐性能來說,要降低概率的發生。
1、合理設置拉取數量,評估每條消息的處理性能,避免在一個session繪畫窗口內,不能正常處理完一個批次,最終影響到下一個窗口的拉取時間,導致'僞下線'
2、消費性能提升,處理流程中的一些耗時操作可以採用多線程分片,或者failfast等機制
3、消費端fullgc,合理設置堆空間和回收策略,減少FULLGC的耗時

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章