概述
最近生产环境出现重复消费的问题,记录一下目前的解决方案;
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.9重复消费和不消费问题记录所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复