1.高水位
高水位是什么
高水位(HW,High Watermark)是 Kafka 中的一个重要的概念,主要是用于管理消费者的进度和保证数据的可靠性的。
高水位标识了一个特定的消息偏移量(offset),即一个分区中已提交消息的最高偏移量(offset),消费者只能拉取到这个 offset 之前的消息。消费者可以通过跟踪高水位来确定自己消费的位置。
这里的已提交指的是 ISR 中的所有副本都记录了这条消息
kafka 中分区 Leader 副本的高水位图
高水位的作用
在Kafka中,HW主要有两个作用:
- 消费进度管理:定义消息可见性,即用来标识分区下的哪些消息是可以被消费者消费的。
- 消费者可以通过记录上一次消费的偏移量,然后将其与分区的高水位进行比较,来确定自己的消费进度。消费者可以在和高水位对比之后继续消费新的消息,确保不会错过任何已提交的消息。这样,消费者可以按照自己的节奏进行消费,不受其他消费者的影响。
- 数据的可靠性:帮助 Kafka 完成副本同步
- 高水位还用于确保数据的可靠性。在Kafka中,只有消息被写入主副本(Leader Replica)并被所有的同步副本(In-Sync Replicas,ISR)确认后,才被认为是已提交的消息。高水位表示已经被提交的消息的边界