Kafka - 日志结束偏移(LEO)与高水位(HW)之间的差异

时间:2016-08-29 09:47:47

标签: apache-kafka kafka-consumer-api kafka-producer-api

副本(LEO and HW)中Leader Replica之间的区别是什么?

它们是否包含相同的数字?我可以理解HW是last committed message offset

何时更新LEO以及如何更新?

2 个答案:

答案 0 :(得分:15)

高水位表示完全复制的消息的偏移量,而如果新的追加记录尚未复制到领导者分区,则日志结束偏移量可能会更大。

消费者只能获得高水印的消费者信息。

有关详细信息,请参阅此博客文章:http://www.confluent.io/blog/hands-free-kafka-replication-a-lesson-in-operational-simplicity/

答案 1 :(得分:2)

让我们从可以在 Google 上找到的最流行的水印定义之一开始

<块引用>

高水印是最后一条消息的偏移量 成功复制到日志的所有副本

我不太相信上述定义,在深入研究后,我发现了这张漂亮的图片:

Watermark visual example

当时出了什么问题?图片中最右边的卡住的追随者没有记录第四条消息。 也许谷歌发现的第一个定义并不完整,而作者的真正意图是:“高水印是成功复制到所有日志in-sync的最后一条消息的偏移量> 副本”

在这种直觉的引导下,我发现此 article 提供了有关如何与代码一起计算 WM 的详细信息。

我发现 WM 定义报告的更精确:

<块引用>

高水印被计算为该分区所有 ISR 的最小 LEO,并且它单调增长。

这个答案和提供的代码证实了我的直觉。

总结我认为水印的详细定义说明了LEO和WM之间的区别。最新提交的偏移量和 LEO 可能与同步跟随者的高水位线一致,但很可能与领导者不同,如第一个链接图像中的示例所示。