Kafka数据重复问题

幂等性
幂等性原理
Producer 的幂等性指的是Producer不论向Broker发送多少次重复数据,数据在 Broker 端只会被持久化一次,保证了数据不重复。
精确一次(Exactly Once):幂等性+至少一次(ack=-1 + 分区副本>=2 + ISR最小副本数量>=2)
这里的幂等性是有条件的:
- 只能保证 Producer 在单个会话内不丟不重,如果 Producer 出现意外挂掉再重启是无法保证的(幂等性情况下,是无法获取之前的状态信息,因此是无法做到跨会话级别的不丢不重);
- 幂等性不能跨多个 Topic-Partition,只能保证单个 partition 内的幂等性,当涉及多个 Topic-Partition 时,这中间的状态并没有同步。
所以幂等性==只能保证的是在单分区单会话内不重复==
重复数据的判断标准:具有 ==<PID, Partition, SeqNumber>== 相同主键消息提交时,只会持久化一次。
- PID(Producer ID):每次会话重启都会分配一个新的。
- Partition:表示分区号
- SeqNumber:单调递增

如何使用幂等性
- 开启参数enable.idempotence:默认为true,false关闭。
事务
Kafka事务原理

- 凡是开启幂等性都是需要生成 PID(Producer ID),只不过未开启事务的 PID 可以在任意 broker 生成,而开启事务只能在 TransactionCoordinator 节点生成。
- TransactionCoordinator 节点选择描述中的【Leader副本】:每个分区都会有多个副本,主要分为两种:Leader副本和Follower副本。

本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果