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。


总结

千里之行,始于足下!

相关推荐
P.H. Infinity4 小时前
【RabbitMQ】03-交换机
分布式·rabbitmq
java1234_小锋5 小时前
讲讲RabbitMQ 性能优化
kafka
龙哥·三年风水6 小时前
群控系统服务端开发模式-应用开发-个人资料
分布式·php·群控系统
funnyZpC8 小时前
quartz集群增强版🎉
java·分布式·开源·集群·定时任务
明达技术9 小时前
工业4.0时代下的分布式IO模块
分布式
天冬忘忧10 小时前
Spark 程序开发与提交:本地与集群模式全解析
大数据·分布式·spark
一叶飘零_sweeeet12 小时前
Dubbo 构建高效分布式服务架构
分布式·架构·dubbo
孤蓬&听雨12 小时前
RabbitMQ自动发送消息工具(自动化测试RabbitMQ)
分布式·测试工具·自动化·rabbitmq·自动发送消息
呼啦啦啦啦啦啦啦啦12 小时前
RabbitMQ 七种工作模式介绍
分布式·rabbitmq
qq_2037694912 小时前
win11安装最新rabbitmq
分布式·rabbitmq·ruby