我是靠谱客的博主 机智仙人掌,这篇文章主要介绍kafka0.9重复消费和不消费问题记录,现在分享给大家,希望可以做个参考。

最近生产环境出现重复消费的问题,记录一下目前的解决方案;

1,https://github.com/apache/kafka/pull/1295

这个issue意思是当有记录可用时,消费者在轮询中执行延迟的任务失败

而这个延迟任务就比较关键了,是用来发送心跳的,这种情况相当于不发送心跳了,导致服务器认为消费端挂掉了,因此就不能消费消息

2,props.put("max.partition.fetch.bytes", "2048");

这个参数 kakka0.9是1M

经过我测试发现,这个默认参数太大,当分区很多的时候(我这边是37个),kafka消费端一次将

拉取37M的数据,如果消费程序不能在一个会话超时时间内,处理完这37M数据,那么就会出现异常。

所以我把这个参数改的小了一点

3,使用数据库锁确保即使重复消费,也不影响业务(这是兜底方案)

正常的话kafka不应该重复消费

4,经调试发现KafkaConsumer有一个closed属性,当KafkaConsumer挂掉的时候,这个属性是true

于是我在后台启一个线程,定时去获取这个属性是不是true,如果是,则程序手动再起一个消费者

以上都是自己摸索的解决方法,可能会有更好的方案。

最后

以上就是机智仙人掌最近收集整理的关于kafka0.9重复消费和不消费问题记录的全部内容,更多相关kafka0内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(352)

评论列表共有 0 条评论

立即
投稿
返回
顶部