栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

说说Kafka水位(high watermark)与日志末端位移(log end offset)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

说说Kafka水位(high watermark)与日志末端位移(log end offset)

分析&回答

水位或水印( watermark )一词,也可称为高水位 (high watermark) ,通常被用在流式处理领域(比如Apache Flink、Apache Spark等),以表征元素或事件在基于时间层面上的进度。一个比较经典的表述为:流式系统保证在水位 t 时刻,创建时间( event time ) = t’ 且 t’ ≤ t 的所有事件都已经到达或被观测到。在 Kafka 中,水位的概念反而与时间无关,而是与位置信息相关。严格来说,它表示的就是位置信息,即位移( offset )。Kafka 源码中使用的名字是高水位 (high watermark) 。严格来说,它表示的就是位置信息,即位移(offset)。

  • log end offset:即日志末端位移,记录了该副本底层日志(log)中下一条消息的位移值。注意是下一条消息!也就是说,如果log end offset=10,那么表示该副本保存了10条消息,位移值范围是[0, 9]。
  • high watermark:即上面提到的水位值。对于同一个副本对象而言,其high watermark值不会大于log end offset值。小于等于high watermark值的所有消息都被认为是“已备份”的(replicated)。同理,leader副本和follower副本的high watermark更新是有区别的。

我们使用下图来形象化地说明两者的关系:

上图中,high watermark值是7,表示位移是0 ~ 7的所有消息都已经处于“已备份状态”(committed),而log end offset值是15,那么8 ~ 14的消息就是尚未完全备份(fully replicated)——为什么没有15?因为刚才说过了,log end offset指向的是下一条消息到来时的位移,故上图使用虚线框表示。我们总说consumer无法消费未提交消息。这句话如果用以上名词来解读的话,应该表述为:consumer无法消费分区下leader副本中位移值大于分区high watermark的任何消息。这里需要特别注意分区high watermark就是leader副本的high watermark值。

如果你没了解过源码,log end offset的更新等一些列问题应该不会深入。

反思&扩展

Flink的watermark是干什么的?


为了大家更加方便的刷题,我们对文章进行了分类和整理,免费为大家提供刷题服务。程序员不欺骗程序员,赶紧扫码小程序刷起来!

为了一站式解决面者刷题问题,部分内容可能存在摘录情况,如有侵权辛苦您留言联系我们,我们会删除文章或添加引用文案,Thanks!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/941288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号