Kafka核心技术与实战Day21关于高水位和Leader Epoch的讨论

121 阅读1分钟

什么是高水位(High Watermark)?

首先, 需要明确基本定义: 什么是高水位? 水位一次多用于流式处理领域, 比如, Spark Streaming或Flink框架中都有水位的概念

在时刻T, 任意创建时间(Event Time)T,T'<= T的所有事件都已经到达或被观测到, 那么T就被定义为水位.

Streaming System 一书是这样描述水位的:

水位时一个单词增加且表征最早未完成工作(oldest work not yet completed) 的时间戳.

用这本书里的图说明:

image.png

Completed蓝色部分表示已完成的工作, In-Flight的红色部分表示正在进行中的工作, 两者的边界就是水位线.

Kafka世界中, 水位的概念有一点不同, Kafka的水位不是时间戳, 更与时间无关. 它是和位置信息绑定的, 具体来说, 它是用消息位移来表征的.

高水位的作用

在Kafka中, 高水位的作用主要有2个.

  1. 定义消息可见性, 即用来标识分区下的哪些消息是可以被消费者消费的.
  2. 帮助Kafka完成副本同步.

此文章为3月Day21学习笔记, 内容来源于极客时间《Kafka核心技术与实战》, 强烈推荐该课