kafka进阶(二)

文章目录


前言

本篇主要介绍kafka 的 Ack机制ISR集合

一、Ack机制

Kafka提供了三种不同的应答机制(ACK):
acks=0 :这是最不可靠的模式。在这种模式下,生产者不会等待来自服务器的确认,这意味着消息可能会在发送之后丢失,而生产者将无法知道它是否成功到达服务器。
acks=1 :这是默认模式,也是一种折衷方式。在这种模式下,生产者会在消息发送后等待来自分区领导者的确认,但不会等待所有副本的确认。这意味着只要消息被写入分区领导者,生产者就会收到确认。如果分区领导者成功写入消息,但在同步到所有副本之前宕机,消息可能会丢失。
acks=all:这是最可靠的模式。在这种模式下,生产者会在消息发送后等待所有副本的确认。只有在所有副本都成功写入消息后,生产者才会收到确认。这确保了消息的可靠性,但会导致更长的延迟。

二、ISR集合

ISR(in-sync replica) 就是 Kafka 为某个分区维护的一组同步集合,即每个分区都有自己的一个 ISR 集合,处于 ISR 集合中的副本,意味着 follower 副本与 leader 副本保持同步状态,只有处于 ISR 集合中的副本才有资格被选举为 leader。一条 Kafka 消息,只有被 ISR 中的副本都接收到,才被视为"已同步"状态。这跟 zk 的同步机制不一样,zk 只需要超过半数节点写入,就可被视为已写入成功。

如果一个follower因为某种故障迟迟无法与leader 同步,那么如果选择 ack 为 all 的话,leader 要一直等待follower 同步完才发 ack 吗

显然不是,in-sync replica set (ISR),意为和leader保持同步的follower集合。当ISR中的follower完成数据的同步之后,leader就会给producer发送ack。如果follower长时间未向leader同步数据,则该follower将被踢出ISR,该时间阈值由replica.lag.time.max.ms参数设定。Leader发生故障之后,就会从ISR中选举新的leader。

被踢出 ISR 的 follower 在选举新的 leader 时不被考虑,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步。等该follower的LEO大于等于该Partition的HW,即follower追上leader之后,就可以重新加入ISR了。

同样的 leader 故障的话,会从ISR中选出一个新的leader,之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的log文件高于HW的部分截掉,然后从新的leader同步数据。

LEO:指的是每个副本最大的offset;

HW:指的是消费者能见到的最大的offset,ISR队列中最小的LEO。


总结

千里之行,始于足下!

相关推荐
嫄码2 小时前
kafka快速入门与知识汇总
java·大数据·分布式·中间件·kafka·linq
会飞的架狗师4 小时前
【面试题】如何保证MQ的消息不丢失、不重复
java·面试·kafka·java-rocketmq
车载诊断技术5 小时前
软件定义汽车的转型之路已然开启
分布式·汽车·电子电气架构·电气电子架构开发的应对策略·什么是功能架构?
qq_463944866 小时前
【Spark征服之路-2.5-Spark-Core编程(一)】
大数据·分布式·spark
下雨不打伞码农6 小时前
mkdir: Cannot create directory /spark/jars. Name node is in safe mode
大数据·分布式·spark
Brian Xia6 小时前
Jaeger开源分布式追踪平台深度剖析(三)Jaeger默认存储Badger原理剖析
分布式·go·lsm-tree
程序员小刘7 小时前
HarmonyOS5 让 React Native 应用支持 HarmonyOS 分布式能力:跨设备组件开发指南
分布式·react native·harmonyos
Detachym7 小时前
CentOS下的分布式内存计算Spark环境部署
分布式·spark·centos
layneyao7 小时前
Ray框架:分布式AI训练与调参实践
人工智能·分布式
佛祖让我来巡山10 小时前
【分布式事务】从基础概念到现代解决方案的全面解析
分布式·分布式事务