Kafka数据消费重复怎么处理

Kafka数据消费重复怎么处理,第1张

Kafka数据消费重复怎么处理

自身处理:幂等性+事务+ACKS=-1  ===>精准一次性消费

kafka在0.11版新增了幂等型producer和事务型producer。前者解决了单会话幂等性等问题,后者解决了多会话幂等性

幂等性: 支持单分区单会话, 分区内数据有序,对照id, 数据有唯一id存在不发送

事务: 支持多分区, 数据有唯一id, 和所有分区中比较, 如果存在不发送, 效率低下 (生产环境较少使用, 容易数据挤压, 应更追求效率)
造成Kafka重复消费的原因:

底层最根本的原因是:已经消费了数据,但是offset并没及时提交(或者压根没提交)

导致的原因很多,常见原因:

1. 强行kill线程,导致消费后的数据,offset没有提交

2. 设置了offset为自动提交,在关闭kafka时,如果在close之前,调用consumer.unsubscribe()则可能有部分offset没提交,下次重启会重复消费

3. 消费后的数据,当ooset还没有提交时,partition就断开连接.eg:通常会遇到消费的数据,处理很好使,导致超过了kafka的会话时间-session timeout时间(0.10.x版本默认会话时间是30s),那么久会reblance重平衡,此时有一定几率offset没提交,会导致重平衡后的重复消费.

4. 当消费者重新分配partition的时候,可能出现从头开始消费的情况,最终导致重发问题

5. 当消费者消费的速度很慢的时候,可能在一个会话周期内还未完成,导致心跳机制检测报告出现问题

常见解决办法:

1.手动维护offset

2.加大会话时间参数--kafka.consumer.session.timeout,以避免被错误关闭的情况产生

3.加大消费者的消费速率(消费能力)

4.在下游对数据进行去重 *** 作

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5722208.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-18
下一篇2022-12-18

发表评论

登录后才能评论

评论列表(0条)

    保存