kafka重复消费和数据丢失问题

其实造成这两个问题的原因很类似,所以解决方式也比较类似,下面我们来看看这两个问题。

重复消费

  • 造成原因

commit的方式不合理。当我们从broker读取消费先处理在commit offset时,如果在commit前发生问题(如网络中断等),那么consumer无法知道这条消息是否已经消费。

  • 解决方案

其实解决方案也比较简单,我们只要把offset和输出数据绑定在一起即可,要么一起成功,要么一起失败。

数据丢失

这个问题在producer和consumer组件中都有可能会发生。

producer

  • 造成原因

producer发送数据给broker后,遇到网络问题通信中断,producer无法判断该条消息是否commit

  • 解决方案

producer生成一个类似主键的东西,发生故障时幕等的重试即可

consumer

  • 造成原因

这个问题的原因也是因为commit的方式不合理导致的,不过和重复消费正好相反。这个问题主要因为comsumer先提交offset再读取消费,但是在读取消息的时候发生了网络问题等造成数据还没有处理,而在comsumer看来这个数据已经处理了。

  • 解决方案

与重复消费的处理方案一样,只要把offset和输出结果绑定在一起即可。

发布了16 篇原创文章 · 获赞 6 · 访问量 3295

猜你喜欢

转载自blog.csdn.net/weixin_42055771/article/details/104012237