Kafka - 日志结束偏移量(LEO)与高水位线(HW)之间的区别

Kafka - difference between Log end offset(LEO) vs High Watermark(HW)

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

它们包含相同的数字吗?我能理解的HW是last committed message offset.

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

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

消费者只能消费达到高水位线的消息。

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

让我们从可以在 Google

上找到的最流行的水印定义之一开始

The high watermark is the offset of the last message that was successfully copied to all of the log’s replicas

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

那怎么了?图片最右侧的卡住追随者没有记录第四条消息。 也许找到的第一个定义 Google 并不完整,作者的实际意图是:“高水位线是成功复制到所有日志的最后一条消息的偏移量 同步个副本

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

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

High watermark is calculated as the minimum LEO across all the ISR of this partition, and it grows monotonically.

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

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