这次我们来补一下LEO和HW的相关概念
这两者在Kafka的数据同步机制中是非常重要的概念
首先是HW,(High Watermark) 俗称高水位,用来标识用户能够读取到的最大偏移量
LogStartOffset,表示的是这条日志最开始的偏移量
LEO,即Log End Offset 表示当前日志文件中下一跳要写入的消息的offset,即当前日志分区中最后一条消息的offset值加一
我们拿一个Log文件来进行举例
上面的Log中的LogStartOffset就是开始的位置0
然后HW是6,表示消费者可以消费0-5之间的消息,6不可见
而LEO是9,表示已经写入了0-8之间的消息
那么把Replicas同步如何影响HW和LEO位置的关系
首先假设ISR有三个副本,一个Leader两个Follower,此时LEO和HW都为3
此时写入两个消息 3和4
在写入完成Leader副本之后,此时Leader的LEO为5
然后Follower发出Fetch请求,如果follow1拉取到所有数据,follow2只拉取到了消息3,
那么此时Follower1的LEO为5,Follower2的LEO为4
在下一次发起Fetch请求的时候,Follower会携带着自己的LEO,一个到了4,一个到了5
这时候会更新HW,根据min(Leader HW,Follower LEO),得到HW最小值为4
然后接下来所有的消息都写入了4
HW就可以更新为4了,就可以消费到offset为4的消息了