工作中,經常會給kafka配置以下參數:
request.timeout.ms 60 * 1000 * 4
max.poll.interval.ms 60 * 1000 * 6
session.timeout.ms 60 * 1000 * 3
heartbeat.interval.ms 60 * 1000 * 2
- session.timeout.ms: 檢查整個消費者死亡超時時間
- heartbeat.interval.ms: 心跳檢查超時時間,但通常應設置為不高于session.timeout.ms的1/3
- max.poll.interval.ms: 檢查消費者處理線程死亡
- request.timeout.ms: 請求超時時間,和上面三個沒有依賴關系
在kafka0.10.1 之前:
- 檢查整個消費者死亡和檢查消費則處理線程,使用的同一個線程,如果設置的max.poll.interval.ms大于session.timeout.ms,遇到一個處理時間過長的消息,會由于線程忙于處理消息,而無法發(fā)送心跳,導致kafka認為改消費則已完全死亡,進而進行Rebalance
- 所以推薦設置:heartbeat.inerval.ms < max.poll.interval.ms < session.timeout.ms
在kafka0.10.1之后:
- session.timeout.ms 和 max.poll.interval.ms 解耦了,拆成了兩個線程,不用再擔心它們之間的依賴關系
- 推薦設置:heartbeat.interval.ms < session.timeout.ms