我是靠谱客的博主 机智仙人掌,最近开发中收集的这篇文章主要介绍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.9重复消费和不消费问题记录所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部