Kafka 消費者組重平衡(Rebalance)

2021-10-17 18:38:42 字數 2321 閱讀 4484

reblance

消費者組的重平衡就組內的消費者,對消費那些主題分割槽達成一致的過程,kafka會盡量保證分配的均勻。

consumer group 的rebalance 本質上是一組協議,它規定了乙個conusmer group 是如何達成一致來訂閱分配

topic的所有分割槽的。只有consumer group有rebalance ,standalone consumer是沒有rebalance的,standalone

consumer 只是通過coordinator獲取到消費的位移。

1.rebalance 什麼時候觸發

2和3一般都會是運維的操作,我們只需要關注第一種rebalance的場景就可以了。真實場景下,rebalance 的觸發場景經常就是第一種,consumer正常情況下也是會觸發rebalance 這種場景就是,處理訊息的邏輯時間太久,超過了我們設定的最大的處理訊息時間,這個時候根據自己的業務評估,設定合理的處理訊息最大事件,避免不必要的rebalance。

rebalance 分割槽分配

consume 預設提供三種分割槽策略 range策略、 策略和sticky策略。如右圖所示rang 策略不會去管之前的分割槽策略,只會重新分成幾個區域後進行分配,round-robin也是直接輪詢到消費者組的consuner上。sticky則不同假設第三台機器掛掉前兩台機器的分配策略不變,僅僅把掛掉的那台機器消費的分割槽負載到存活的consumer上即可。kafka也支援自定義的重平衡分配策略,使用者需要建立自己的分配器。

sticky

rebalance流程

如右圖所示,為一次重平衡的流程。

首先消費者組的成員需要找到coordinator 演算法之前已經講過了。

然後成員進行加入組的請求。coordinator會給所有的成員中選取出乙個leader。負責分配rebalance方案。

然後將訂閱資訊,consumer group的資訊返回給consumer。

接下來consumer group的所有成員還會請求coordinator,此時的請求方式為syncgroup。leader會把consumer group資訊和分配方案傳送給coordinator,其他的請求也會傳送請求,不過不包含資訊,之後,coordinator會把分配資訊傳送給各個成員,一次rebalance完成。

reblance 日誌:**

[2021-01-22 15:37:40,672] info [groupcoordinator 0]: member consumer-1-277bdb46-2940-4a80-bb4a-9f97379c2e7c in group hello_1 has failed, removing it from the group (kafka.coordinator.group.groupcoordinator)

[2021-01-22 15:37:40,674] info [groupcoordinator 0]: preparing to rebalance group hello_1 in state preparingrebalance with old generation 3 (__consumer_offsets-24) (reason: removing member consumer-1-277bdb46-2940-4a80-bb4a-9f97379c2e7c on heartbeat expiration) (kafka.coordinator.group.groupcoordinator)

[2021-01-22 15:37:42,674] info [groupcoordinator 0]: stabilized group hello_1 generation 4 (__consumer_offsets-24) (kafka.coordinator.group.groupcoordinator)

[2021-01-22 15:37:42,676] info [groupcoordinator 0]: assignment received from leader for group hello_1 for generation 4 (kafka.coordinator.group.groupcoordinator)

記一次解決kafka問題:

每隔一段時間kafka就會進行定期的選舉,產生大量的日誌切分的日誌。導致運維告警。

分析問題:

1.重新選舉時大量的日誌切分日誌

部署選擇的是預設的配置,所以kafka寫入到leader replica就認為寫入成功,會導致leader 和 follower 資料不同步。當重新選主後就會出現大量的日誌切分日誌。

2.開啟了定期選主的引數,應該設定為false。

Kafka消費者組再均衡問題

kafka消費者組再均衡問題 harvardfly 在kafka中,當有新消費者加入或者訂閱的topic數發生變化時,會觸發rebalance 再均衡 在同乙個消費者組當中,分割槽的所有權從乙個消費者轉移到另外乙個消費者 機制,rebalance顧名思義就是重新均衡消費者消費。rebalance的過...

kafka消費者無法消費異常

今天被乙個kafka消費異常折磨了一天,頭差點炸了,還好最後解決了它 異常 伺服器 record is corrupt 記錄損壞 不明原因 有可能磁碟空間不足導致 導致消費者無法正常消費訊息 卡在某乙個offset 不能繼續消費 解決辦法 先停掉消費者程式 殺掉程序 不可關閉kafka服務 然後手動...

kafka 主動消費 Kafka消費者的使用和原理

publicstaticvoidmain string args finally 前兩步和生產者類似,配置引數然後根據引數建立例項,區別在於消費者使用的是反序列化器,以及多了乙個必填引數 group.id,用於指定消費者所屬的消費組。關於消費組的概念在 kafka中的基本概念 中介紹過了,消費組使得...