Kafka的Ack应答&&数据重复解决(幂等性原理及事务处理)

Ack应答

Acks=0无论leader的数据有没有落盘都可以发送,但数据的可靠性就非常差,一般都不会用,效率高

Acks=1 当leader的数据落盘之后,follow不管有没有落盘,应答发送,可靠性中等,效率也中等(当leader挂了,重新选举leader,由于之前的应答,之前的数据就丢失了)

Acks=-1只有当leader和isr中的follow的数据都落盘之后才能应答,效率最低,但数据的可靠性最强,(但存在问题就是当其中一个的follow挂了,就迟迟不会应答,而导致集群瘫痪)

为了解决这个防止瘫痪的问题就有了isr队列,时刻来存储可以和leader保持通讯的节点id

还有一种会出现发送重复的情情况,就是在leader和isr里的follow都落盘之后,leader挂了,就会重新在选举leader,此时由于之前的没有应答成功,导致之前的数据在发一次就会导致数据重复,在0.11版本之后出现了幂等性原理和事务处理可以解决数据重复的问题

当副本数为1时,效果就会和acks=1一样,为了避免这个,所以

接受端至少一次=Acks为-1+分区副本数量大于等于2+isr里应答的最小副本数大于等于2

幂等性说白了就是在数据到kafka集群中,进行的一次去重,通过三个指标(UID,PartitionId,SeqNum)来判断是否重复

但是UID每次kafka重启一次就会重新分配一个,所以只能是在单分区单次会话中能保证不重复

Enable.idempotence=true( 默认开启)

事务处理,事务在使用前必须在配置文件里指定事务唯一的producer_id ,必须要开启幂等性,而如果客户端挂了(UID)就可能导致重复,而事务处理就能够将客户端挂了,就能够回滚到之前的状态(还没开始上传leader数据),开启客户端通过未完成的事务重新上传

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值