Kafka控制拉取频率和请求超时时间
背景
当一次拉取接收数据过多时,会出现消费过慢超过默认超时时间,导致消费积压,消费者心跳过期,离开消费组从而失去该消费组消费数据的情况。
解决方案
- 减少单次拉取消息条数,增加最大拉取间隔时间。
消费者配置中,减少单次拉取消息条数max.poll.records,增加获取消息后提交偏移量的最大时间max.poll.interval.ms。
max.poll.records默认较大,容易产生消费积压导致超过设定的时间(默认5分钟),服务端会认为该消费者失效。
- 增加超时时间。
消费者配置中,增加超时时间session.timeout.ms。
session.timeout.ms是心跳检测时间,kafka消费者默认3秒发送一次心跳,若服务端在session.timeout.ms内未检测心跳,会认为该消费者失效。
- 调整发送心跳时间
消费者配置中,调整发送心跳时间heartbeat.interval.ms。
当使用 Kafka 的分组管理功能时,心跳到消费者协调器之间的预计时间。心跳用于确保消费者的会话保持活动状态,当有新消费者加入或离开组时方便重新平衡。该值必须比 session.timeout.ms 小,通常不高于1/3。它可以调整得更低,以控制正常重新平衡的预期时间。
控制拉取频率
消费者配置中,auto.commit.interval.ms属性控制拉取频率。