Kafka消息重复消费问题

1.背景
线上服务消费Kafka消息时,每条消息处理时间比较长(涉及到文件解析+后台业务系统调用),发现了2个问题:1:旧的消息被重复消费;2:后续新的消息则会被延迟消费

2.原因
Kafka consumer两个配置参数:
1)max.poll.interval.ms:两次poll之间允许的最大时间间隔,默认300s(5分钟)
两次poll超过此时间间隔,Kafka broker会进行rebalance,导致客户端连接失效,无法提交消费offset信息,下次重连消费又会从之前的offset位置开始消费,从而引发重复消费。

2)max.poll.records:一次poll拉取的消息数量,默认值500条
每条消息处理的业务时间超过60秒,那么当前这批消息处理时间将超会过5分钟,从而引发poll超时,消息数据回滚,最终导致重复消费。

3.解决
1)代码优化
比如通过异步线程池来处理

2)调整相关参数:
. 增大max.poll.interval.ms的值
. 减小max.poll.records的值

你可能感兴趣的:(java,kafka)