1.概念
1.LEO(last end offset)
当前replica存的当前最大offset的下一个值
2.HW(high watermark) :
小于 HW值得offset所对应的消息被认为是"已提交"或"已备份"的消息,才对消费者可见。
假设ISR中目前有1个leader,3个follower。
1、leader接收一个消息,自己保存后,马上发送3个请求通知3个follower赶紧保存
2、等待3个follower响应保存成功
3、响应producer,消息提交成功
你是这么想的么?反正当时我是这么想的。
实际上不是的,这个同步是follower主动去请求leader进行同步的。
因为是每个follower情况不一样,所以才会出现LEO和HW的概念。
简言之,木桶原理
replica里存了多少数据和consumer能消费多少数据,不是一回事。
所谓木桶原理,就是把每个replica当作一个木桶的板子,桶能装多少水只取决于最短的那块板子。
这就是也有些人把HW叫成 高水位 的原因。
而 HW 的概念,也契合前文提到的【完全同步】,HW之前的所有消息,在ISR中是完全同步的。
LEO、HW流程
1.数据写到leader的partition上 2.leader更新自己的leo, 3.follower带上自己的leo, 4.leader更新follower列表每个follower对应的leo, 5.尝试更新ISR 6.取follower的leo列表最小值做hw并尝试更新, 7.将hw返回follower, 8.follower更新自己的leo 9.follower取自己的hw和leader返回的hw做对比取最小值更新。
出自链接:https://blog.csdn.net/daima_caigou/article/details/109390705