Kafka重复消费

目录
1.出现的情况
2.解决方案

出现的情况

1.crash来不及提交Offset

  • 读完消息先commit(提交Offset),再处理消息 => commit后,还没来得及处理就crash
    • 实际是没有处理,但是Offset已经提交, 丢失消费
  • 读完消息,处理消息后,再commit(提交Offset) => 处理完消息后,还没commit就crash
    • 实际处理完,但是Offset还没有提交, 重复消费

2.在session时间内未提交Offset

kafka的consumer消费数据时首先会从broker里读取一批消息数据进行处理,处理完成后再提交offset。而我们项目中的consumer消费能力比较低,导致取出的一批数据在session.timeout.ms时间内没有处理完成,自动提交offset失败,然后kafka会重新分配partition给消费者,消费者又重新消费之前的一批数据,又出现了消费超时,所以会造成死循环,一直消费相同的数据。  

解决方案

针对上述情况1.

1.放弃效率换取可靠性
读完消息,处理消息后,再commit(提交Offset),本地收到消息,持久化消息到数据库(记录ID,10001),提交Offset后,才清空数据库改记录.冗机后,重启启动,如果数据库没有改记录则可以消费下一条,有的话,则从记录开始的ID开始消费
效率太低,但是确保.每读完一条消息调用一下consumer.commitOffsets()

2.或者不理会重复消费情况,客户端的处理逻辑
每条消息有其特定的标识,在处理消息前,查询数据库是否存在该记录,存在则放弃,反之出处理(消息可以使用唯一id标识)

针对上述情况2.
http://blog.csdn.net/u011637069/article/details/72899915

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值