【问题标题】:Kafka - difference between Log end offset(LEO) vs High Watermark(HW)Kafka - 日志结束偏移量(LEO)与高水位线(HW)之间的区别
【发布时间】:2017-01-05 07:20:04
【问题描述】:

副本中的LEO and HWLeader Replica)有什么区别?

它们会包含相同的数字吗?我可以理解硬件是last committed message offset

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

【问题讨论】:

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


    【解决方案1】:

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

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

    查看这篇博文了解更多详情:http://www.confluent.io/blog/hands-free-kafka-replication-a-lesson-in-operational-simplicity/

    【讨论】:

    • 感谢您提供的重要信息。您的意思是说,只有在所有 ISR 中复制消息,硬件才会更新?在异步副本过程中,领导副本中的硬件也会在所有 ISR 更新后更新?
    • HW 和 LEO 都只为领导分区维护。是的,只有在 ISR 分区复制消息时,硬件才是高级的。
    • 你确定只为Leader副本维护HW和LEO吗?根据维基页面cwiki.apache.org/confluence/display/KAFKA/…,似乎每个副本都有这些字段..
    • 我不是 100% 确定...但是,链接指向 2012 年的“草稿”——不确定这是否以完全相同的方式实现...如果这些细节很重要,我们可以深入挖掘:) 我可以问一些大学。主要问题是关于 EOL 和 HW 的差异——我想基本答案保持不变。 HW 是复制到 IRS 的已提交消息的最新偏移量。 EOL 已写入分区但尚未完全复制。
    【解决方案2】:

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

    高水位线是上一条消息的偏移量 成功复制到所有日志的副本

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-13
      • 1970-01-01
      • 2019-11-25
      • 2019-10-06
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      相关资源
      最近更新 更多