kafka-保证数据不重复-生产者开启幂等性和事务的作用?

1. 生产者开启幂等性为什么能去重?

1.1 场景

适用于消息在写入到服务器日志后,由于网络故障,生产者没有及时收到服务端的ACK消息,生产者误以为消息没有持久化到服务端,导致生产者重复发送该消息,造成了消息的重复现象,而幂等性就是为了解决该问题。

1.2 去重原理

通过3个值的唯一性去重:

  1. PID:生产者ID
  2. 分区号
  3. seq:单调递增

 2. 生产者开启事务为什么能去重?

2.1 场景

当数据发送到broker时,失败了,导致ack没有应答成功,如果没有开启事务,那么这条数据可能只落在了leader的磁盘上,没有落在flower的磁盘上,此时会进行重试,再把数据发送一遍,那么leader的数据就重复了。

2.2 去重原理

如果开启事务那就会有原子性,数据要么写成功落盘,要么写失败回滚。

当数据发送到broker时,失败了,导致ack应答失败,这条数据可能只落在了leader的磁盘上,没有落在flower的磁盘上,如果开启了事务,那么会进行回滚,将leader的数据回滚,然后会进行重试,再把数据发送一遍,就解决了重复问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka提供了两个关键的特来确保消息的一致和可靠事务。 1. (Idempotent):Kafka的生产者可以配置为生产者,即保证在发送消息时不会产生重复消息。意味着无论发送多少次相同的消息,最终结果都是一样的,不会导致副作用生产者通过在消息中添加序列号来实现,Kafka在接收到重复消息时会自动去重,确保只有一条消息被写入。 2. 事务(Transactional):Kafka从0.11版本开始引入了事务支持。事务消费者可以以事务的方式读取和处理消息,同时也支持事务生产者在写入消息时保持原子事务消费者可以确保读取的消息在被处理后不会被重复消费,并且在处理失败时可以回滚事务事务生产者可以将多个写操作组合为一个原子事务,要么全部成功提交,要么全部回滚。 使用事务可以帮助确保在Kafka中进行消息的可靠处理和传递。消费者和事务消费者可以避免重复消费和数据不一致的问题,而生产者事务生产者可以确保消息的原子写入和可靠提交。 需要注意的是,启用事务会增加一定的能开销,因此在使用时需要权衡能和一致的需求,并根据实际情况进行配置和调整。同时,事务也需要结合Kafka的相应API和配置进行正确的使用和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值