Kafka-ACK机制(ack应答原理、冥等性、事务)
创作时间:
作者:
@小白创作中心
Kafka-ACK机制(ack应答原理、冥等性、事务)
引用
CSDN
1.
https://blog.csdn.net/weixin_48935611/article/details/138961365
Kafka的ACK机制是保证消息可靠传递的关键组件,它决定了生产者在发送消息时需要等待的确认级别。本文将详细介绍Kafka的ACK机制、幂等性和事务性,帮助读者深入理解Kafka的消息传递机制。
Kafka-ACK机制
Kafka中的ACK(Acknowledgement)机制是用于保证消息可靠传递的关键组件之一。在生产者发送消息到Kafka集群时,ACK机制决定了何时认为消息已经成功发送。这个机制非常重要,因为它影响了生产者对消息发送的信心以及消费者对消息接收的可靠性。
消息发送阶段
- 生产者将消息发送到Kafka集群的一个主题(Topic)中的特定分区(Partition)。
- 在发送消息时,生产者可以指定ACK的级别,以决定何时认为消息已经成功发送。这个级别通常由acks参数控制。
ACK级别
acks=0
- 生产者不会等待来自服务端的任何确认。
- 消息被立即视为已发送,这意味着生产者不会等待任何确认,这是最轻量级的ACK级别,但也是最不可靠的。
acks=1
- 生产者会在消息被领导者(Leader)接收后收到来自领导者的确认。
- 一旦领导者收到消息,就会立即向生产者发送确认,然后生产者就认为消息已经成功发送。
- 这种设置提供了一定程度的可靠性,因为只有领导者确认了消息,但是如果领导者接收消息后立即失效,消息可能会丢失。
acks=-1
- 生产者会等待Leader和在ISR中的所有副本都收到消息后的确认。
- 这种设置提供了最高级别的可靠性,因为只有所有ISR中的副本都收到消息,才会发送确认。
- ISR(In-Sync Replicas):ISR 是指与Leader副本保持同步的Followers副本集合。
- 这意味着即使领导者失效,ISR中的其他副本也会确保消息被复制到足够多的地方,从而保证消息不会丢失。
生产者处理ACK
- 生产者在发送消息后可以根据ACK的级别来决定下一步的操作。
- 如果ACK级别是acks=0,生产者不会等待确认,继续发送下一条消息。
- 如果ACK级别是acks=1,生产者会等待领导者的确认,然后继续发送下一条消息。
- 如果ACK级别是acks=-1,生产者会等待ISR中的所有副本都确认收到消息,然后继续发送下一条消息。
消费者处理ACK
- 消费者通常会根据消息的ACK级别来决定消息何时被认为已经成功消费。
- 如果ACK级别是acks=0,消费者可能无法确定消息是否已经成功发送,因为生产者不会等待确认。
- 如果ACK级别是acks=1或acks=-1,消费者可以相对可靠地知道消息是否已经成功发送,并且可以在需要时请求重试或者处理失败。
数据可靠性分析
(1)ACK = 0
(2)ACK =1
(3)ACK=-1
Tips:
Leader收到数据,所有Follower都开始同步数据但有一个Follower,因为某种故障,迟迟不能与Leader进行同步,那这个问题怎么解决呢?
数据可靠性总结:
- acks=0:生产者发送过来数据就不管了,可靠性差,效率高;
- acks=1:生产者发送过来数据Leader应答,可靠性中等,效率中等
- acks=-1,生产者发送过来数据Leader和ISR队列里面所有Follwer应答,可靠性高,效率低:
- 在生产环境中,acks=0很少使用:acks=1,一般用于传输普通日志,允许丢个别数据:acks=-1,一般用于传输和钱相关的数据对可靠性要求比较高的场景。
数据重复分析
冥等性
- 冥等性是指无论消息被发送多少次,结果都是相同的特性。
- 在Kafka中,冥等性确保生产者发送的消息不会因为网络问题、重试或其他原因而导致重复消息的发送。这种特性对于保证消息传递的可靠性至关重要。
- 冥等性的实现:在Kafka中,生产者可以通过设置enable.idempotence=true来启用冥等性。
- 当冥等性启用时,生产者会在消息上添加一个唯一的ID,并且记录已经发送的消息ID,以便在发生重试时避免重复发送相同的消息。
- 与ACK机制的关系:冥等性通常与ACK机制结合使用,以确保消息发送的幂等性。
- 即使在需要重试时,生产者也可以确保消息不会重复发送。
- 在ACK级别为acks=-1时,冥等性特别有用,因为它确保了消息只有在所有ISR副本都确认接收后才会被提交,避免了重复消息的可能性。
事务
Kafka的事务机制允许生产者发送一组相关的消息,并确保这组消息要么全部成功提交,要么全部回滚,从而实现消息传递的原子性。
- 0.11版本的Kafka同时引入了事务的特性,为了实现跨分区跨会话的事务,需要引入一个全局唯一的Transaction ID,并将Producer获得的PID和Transaction ID绑定。
- 这样当Producer重启后就可以通过正在进行的Transaction ID获得原来的PID。
Kafka事务具有以下特性:
- 原子性(Atomicity):事务要么全部成功提交,要么全部回滚,不会出现部分提交的情况。
- 一致性(Consistency):事务在提交前可以确保消息的一致性,即所有消息都符合应用程序的预期状态。
- 隔离性(Isolation):事务之间相互隔离,互不影响。
- 持久性(Durability):已经提交的事务保证不会丢失。
事务的实现:
- 为了管理Transaction,Kafka引入了一个新的组件Transaction Coordinator。
- Producer就是通过和Transaction Coordinator交互获得Transaction ID对应的任务状态。
- Transaction Coordinator还负责将事务所有写入Kafka的一个内部Topic,这样即使整个服务重启,由于事务状态得到保存,进行中的事务状态可以得到恢复,从而继续进行。
与ACK机制的关系:
- 事务机制通常与ACK机制相结合,以确保消息传递的可靠性和一致性。
- 在事务中,生产者可以设置ACK级别来决定何时提交事务,以及如何处理提交失败的情况。例如,在acks=-1的情况下,生产者可以确保事务中的所有消息都已经被ISR中的所有副本接收,从而保证事务的原子性和持久性。
热门推荐
石斛麦冬鲍鱼排骨炖汤的制作方法(美味健康的汤品)
南宁出发,邂逅贵州“村超”:榕江自驾摄影攻略
亲人离世后的心理重建:从悲伤到新生
科幻从电影走进现实!盘点经典电影中的科幻设计
第二届智能社会治理论坛在光谷召开,发布多项人工智能成果
夏日健康指南:水果存储、静脉曲张预防与祛痘全攻略
12种常见蔬菜的保鲜方法
古代食物的秋收冬藏
冬笋去涩并保存
老年人十大常见疾病:症状与治疗方法全解析
重视老年听力损失,提高老年生活质量
老年人脑鸣是什么原因引起的
科普|夜深人静脑边总有声音回响?可能是某种疾病的征兆
南开中学集团化办学:从“一校四点”到九校联合
探秘四川近郊:璧山旅游景点推荐
支付快递费怎么做会计分录(支付快递费用什么会计科目)
房顶漏水补救措施及注意事项
如何解决房间地面渗水的问题?怎样找出渗水的原因并进行处理?
【色水测试】如何找出漏水渗水祸害源头?
如何安全操作汽车安全气囊?使用安全气囊时需要注意哪些安全事项?
汽车安全气囊的构造原理及其现代意义
明初南北榜案疑点重重,北方无一人中榜,是科举舞弊还是偶然?
经济增长加速,股票市场迎来春天?
股票投资风险管理:从案例到策略的全面解析
股票交易心理学:教你理性投资
喝莓茶的最佳时间,你知道吗?
6种天然饮品,为肾添活力!正适合现在喝
胆结石患者不能吃菠菜?若想肝胆健康,这3样蔬菜少吃
南开中学集团化办学再提速:2025年新建多校,优质资源辐射津渝两地
南开中学教育集团:从百年名校到教育航母