推荐答案
session.timeout.ms
参数用于控制 Kafka 消费者组中消费者与 Kafka 代理(Broker)之间的会话超时时间。如果消费者在这个时间内没有发送心跳(heartbeat),Kafka 会认为该消费者已经失效,并将其从消费者组中移除,触发重新平衡(rebalance)。
本题详细解读
1. 参数定义
session.timeout.ms
是一个消费者端的配置参数,单位为毫秒。- 它定义了消费者与 Kafka 代理之间的会话超时时间。
2. 会话超时机制
- 消费者在加入消费者组后,会定期向 Kafka 代理发送心跳以表明自己仍然存活。
- 如果 Kafka 代理在
session.timeout.ms
时间内没有收到消费者的心跳,代理会认为该消费者已经失效。 - 失效的消费者会被从消费者组中移除,并触发重新平衡,将分区重新分配给其他存活的消费者。
3. 参数设置建议
session.timeout.ms
的值需要根据实际业务场景和消费者处理消息的速度来设置。- 如果设置过小,可能会导致频繁的重新平衡,影响系统稳定性。
- 如果设置过大,可能会导致消费者失效后较长时间才被检测到,影响消息处理的及时性。
4. 相关参数
heartbeat.interval.ms
:消费者发送心跳的时间间隔,通常设置为session.timeout.ms
的三分之一左右。max.poll.interval.ms
:消费者处理消息的最大时间间隔,如果超过这个时间没有调用poll()
方法,消费者也会被认为失效。
5. 示例配置
-- -------------------- ---- ------- ---------- ----- - --- ------------- ------------------------------ ------------------ --------------------- -------------- ------------------------------- --------- -- --- ---------------------------------- -------- -- -- ----------------------------- ------------------------------------------------------------ ------------------------------- ------------------------------------------------------------ --------------------- ------- -------- - --- -----------------------