全部產品
Search
文件中心

ApsaraMQ for Kafka:為什麼消費用戶端頻繁出現Rebalance?

更新時間:Jul 06, 2024

可能是雲訊息佇列 Kafka 版用戶端版本過低或者Consumer沒有獨立線程維持心跳。

問題現象

使用ApsaraMQ for Kafka時,消費用戶端頻繁出現Rebalance。

可能原因

可能導致故障的原因包括:

  • v0.10.2之前版本的用戶端:Consumer沒有獨立線程維持心跳,而是把心跳維持與poll介面耦合在一起。其結果就是,如果使用者消費出現卡頓,就會導致Consumer心跳逾時,引發Rebalance。

  • v0.10.2及之後版本的用戶端:如果消費時間過慢,超過一定時間(max.poll.interval.ms設定的值,預設5分鐘)未進行poll拉取訊息,則會導致用戶端主動離開隊列,而引發Rebalance。

解決方案

首先您需要瞭解以下幾點資訊:

  • session.timeout.ms:心跳逾時時間(可以由用戶端自行設定)。

  • max.poll.records:每次poll返回的最大訊息數量。

  • v0.10.2之前版本的用戶端:心跳是通過poll介面來實現的,沒有內建的獨立線程。

  • v0.10.2及之後版本的用戶端:為了防止用戶端長時間不進行消費,Kafka用戶端在v0.10.2及之後的版本中引入了max.poll.interval.ms配置參數。

  1. 參考以下說明調整參數值:

    • session.timeout.ms:v0.10.2之前的版本可適當提高該參數值,需要大於消費一批資料的時間,但不要超過30s,建議設定為25s;而v0.10.2及其之後的版本,保持預設值10s即可。

    • max.poll.records:降低該參數值,建議遠遠小於<單個線程每秒消費的條數> * <消費線程的個數> *<max.poll.interval.ms>的積。

    • max.poll.interval.ms:該值要大於<max.poll.records> / (<單個線程每秒消費的條數> * <消費線程的個數>)的值。

  2. 盡量提高用戶端的消費速度,消費邏輯另起線程進行處理。

  3. 減少Group訂閱Topic的數量,一個Group訂閱的Topic最好不要超過5個,建議一個Group只訂閱一個Topic。

  4. 將用戶端升級至0.10.2以上版本。