前面說過了consumer心跳機制:consumer定期向coordinator發送心跳請求,以表明自己還在線;如果session.timeout.ms內未發送請求,coordinator認為其不可用,然后觸發rebalance
session.timeout.ms:coordinator感知consumer崩潰所需時間,默認10秒
heartbeat.interval.ms:consumer發送心跳請求間隔,默認3秒
示例:topic1有2個分區,3個副本;三個消費者屬於同一個組,並訂閱該topic;
可以看到前兩個消費者分別消費0號分區和1號分區,第三個消費者閑置;所以實際應用中,組內消費者的個數不要大於分區數,否則會造成資源浪費。
把consumer3停掉,10秒后能夠看到consumer1和consumer2,由於rebalance心跳失敗,並且重新加入組
使用建議:
1、session.timeout.ms一定要大於heartbeat.interval.ms,否則消費者組會一直處於rebalance狀態
2、session.timeout.ms最好幾倍於heartbeat.interval.ms;這是因為如果因為某一時間段的網絡延遲導致coordinator未感知到心跳請求,session.timeout.ms和heartbeat.interval.ms接近的話,會導致consumer組rebalance過於頻繁,影響消費性能