分享

关于kafka消费端多线程丢数据的问题

本帖最后由 ighack 于 2019-6-28 09:23 编辑

我现在做一个假设消费程序开了A B两个线程。每一个线程都是一个完整的Consumer实例。每个实例一次取10条消息
A 取了1-10
B 取了11-20
现在B线程处理完成,提交。但A线程还没处理完成。线程挂了。那么下次取数据就时候就变成了从21开始取。前面的1-10数据就丢了

如果我只开启一个Consumer实例。多线程处理消息也有这个问题
如我只开了一个A Consumer实例。一次取了20个消息
其中一个线程处理的是18。这个线程最先处理完成并提交。其他的线程还没处理完。程序挂了。下次在取数据就时候就变成了19
那么前面的数据也丢了

我认为只要是多线程序就是一个乱序执行。最面的数据可能先提交。前面的数据没处理完成。程序挂掉就会有这个问题。


已有(2)人评论

跳转到指定楼层
s060403072 发表于 2019-6-28 21:38:45
建议楼主先了解下kafka消费机制,如下图

619336-20180428220538969-304719363.png

不会出现一个线程消费同一个分区,所以不会出现楼主的情况。
A 取了1-10
B 取了11-20


对于挂掉会丢失数据,kafka有exactly-once机制,这个不用担心。

详细可参考下面内容:
kafka0.11Exactly Once语义与事务机制原理介绍
http://www.aboutyun.com/forum.php?mod=viewthread&tid=24367


回复

使用道具 举报

ighack 发表于 2019-7-1 09:54:35
多个Consumer我昨天也想到了
每一次提交是性对一个分区的


但多线程做消费处理还是会出现数据丢失的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条