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。


总结

千里之行,始于足下!

相关推荐
wWYy.9 小时前
基于Raft分布式Kv存储:sendRequestVote
分布式
笨鸟先飞的橘猫17 小时前
游戏后端分布式学习——消息队列在游戏的用法
分布式·学习·游戏
Wang's Blog17 小时前
Go-Zero项目开发40: 基于Jaeger的分布式链路跟踪实战
开发语言·分布式·golang
wWYy.17 小时前
基于Raft分布式Kv存储:sendAppendEntries
分布式
范什么特西21 小时前
关于kafka
分布式·kafka
wWYy.1 天前
基于Raft分布式Kv存储:AppendEntries
分布式
霸道流氓气质1 天前
分布式系统中跨进程上下文传递方案
分布式
wWYy.1 天前
基于Raft的分布式Kv存储项目:raft.h
开发语言·分布式·qt
wWYy.1 天前
基于Raft分布式Kv存储:日志寻找匹配
分布式
ACP广源盛139246256731 天前
YLB3118 存储桥接芯片完整机会点@ACP#联动曙光 8000
大数据·人工智能·分布式·单片机·嵌入式硬件