欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Kafka数据消费重复怎么处理

时间:2023-08-08

自身处理:幂等性+事务+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.在下游对数据进行去重操作

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。