刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!
水位或水印( watermark )一词,也可称为高水位 (high watermark) ,通常被用在流式处理领域(比如Apache Flink、Apache Spark等),以表征元素或事件在基于时间层面上的进度。一个比较经典的表述为:流式系统保证在水位 t 时刻,创建时间( event time ) = t' 且 t' ≤ t 的所有事件都已经到达或被观测到。在 Kafka 中,水位的概念反而与时间无关,而是与位置信息相关。严格来说,它表示的就是位置信息,即位移( offset )。Kafka 源码中使用的名字是高水位 (high watermark) 。严格来说,它表示的就是位置信息,即位移(offset)。
我们使用下图来形象化地说明两者的关系:
上图中,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的更新等一些列问题应该不会深入。
本文链接:说说Kafka水位(high watermark)与日志末端位移(log end offset)
版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!