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

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

重复消费

  • 造成原因

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

  • 解决方案

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

数据丢失

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

producer

  • 造成原因

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

  • 解决方案

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

consumer

  • 造成原因

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

  • 解决方案

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值