????????消費者重平衡是指主題下的分區怎么分配給消費者的過程。下面這個圖可以看出該過程:原來有2個消費者,3個分區,其中一個消費者肯定就的處理2個分區了。那么當新加入消費者時,則每個消費者就只處理一個分區了。處理這個分區過程的叫協調者,協調者就在broker端。
? ? ? ? 當發生重平衡時,所有消費者都不能收到消息,所以發生這個過程是非常嚴肅的。
什么時候會發生重平衡?
- ?新的消費者加入。
- 消費者主動離開。比如取消對主題的訂閱。
- 消費者崩潰離開。比如網絡延遲導致心跳一直沒收到。
- 主題分區數發生變更。
怎么避免消費者重平衡?
? ? ? ? 有幾個參數可以重點看下:
- session.timeout.ms=10 協調者超過10秒沒有收到消費者的請求則認為消費者已經下線。
- heartbeat.interval.ms 心跳頻率。消費者間隔多久發送心跳。
- max.poll.interval.ms 消費者兩次調用poll的時間間隔,默認是5分鐘。超過5分鐘則認為上次拉去的消息一直沒消費完成,也被認為需要重平衡。
- max.poll.records=500 默認單次最大拉取條數為500。如果一次拉取太多數據,會導致超時了還沒處理完成。
????????主題有3個分區,那么消費者組員數應該也是3個才算合理的分配,多出的組員將無法分配消費分區是種浪費。消費者對應機器數最好是固定的,避免頻繁加減節點帶來的重平衡。
????????