什么是高水位(High Watermark)?
首先, 需要明确基本定义: 什么是高水位? 水位一次多用于流式处理领域, 比如, Spark Streaming或Flink框架中都有水位的概念
在时刻T, 任意创建时间(Event Time) 为T‘, 且T'<= T的所有事件都已经到达或被观测到, 那么T就被定义为水位.
Streaming System 一书是这样描述水位的:
水位时一个单词增加且表征最早未完成工作(oldest work not yet completed) 的时间戳.
用这本书里的图说明:
Completed蓝色部分表示已完成的工作, In-Flight的红色部分表示正在进行中的工作, 两者的边界就是水位线.
Kafka世界中, 水位的概念有一点不同, Kafka的水位不是时间戳, 更与时间无关. 它是和位置信息绑定的, 具体来说, 它是用消息位移来表征的.
高水位的作用
在Kafka中, 高水位的作用主要有2个.
- 定义消息可见性, 即用来标识分区下的哪些消息是可以被消费者消费的.
- 帮助Kafka完成副本同步.
此文章为3月Day21学习笔记, 内容来源于极客时间《Kafka核心技术与实战》, 强烈推荐该课