6、Kafka消息重复

本文探讨了Kafka中消息重复的问题及其解决方案。Kafka通过幂等性特性来防止生产者发送重复消息,利用Producer ID (PID) 和 Sequence Number 确保<Topic, Partition>的Exactly Once语义。同时,介绍了消费者端如何避免因异常或网络错误导致的重复消费,包括调整max.poll.interval.ms、max.poll.records和session.timeout.ms等参数。最后提出了三种避免重复消息影响的方法:使用消息唯一标识符、优化消费者处理能力和指定分区消费。" 100960507,3231131,BGP路由技术详解:概念、原理与配置实践,"['网络', '路由协议']
摘要由CSDN通过智能技术生成

生产者:
kafka生产者在发送数据的时候,通常会有同步与异步发送,异步就是缓存部分数据, 达到一定条数或时间后批量发送,效率高效。
那么,不管同步还是异步,消息是否发送成功,Kafka通过acks这个参数来控制的:
0—表示不进行消息接收是否成功的确认;
1—表示当Leader接收成功时确认;
-1(all)—表示Leader和Follower都接收成功时确认;
通常为了兼顾效率与数据安全,将acks设置为1,只让每个分区的leader确认收到消息即可,不等副本是否同步数据完毕。

那么,在生产者发送数据到kafka后,如果返回成功的时候,由于网络等原因出现异常, 那么生产者是收不到成功信号的,会重发,导致消息重复

那么kafka如何解决生产者发送重复消息呢?
引入幂等性:kafka producer在进行retry重试时,只会生成一个消息。
幂等性实现:PID和Sequence Number
为了实现Producer的幂等性,Kafka引入了Producer ID(即PID)和Sequence Number。 PID:每个新的Producer在初始化的时候会被分配一个唯一的PID,这个PID对用户是 不可见的。
Sequence Numbler:(对于每个PID,该Producer发送数据的每个<Topic, Partition> 都对应一个从0开始单调递增的Sequence Number。
Broker端在缓存中保存了这seq n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值