这次我们来补一下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的消息了

发表评论

邮箱地址不会被公开。 必填项已用*标注