一、概念
1、水位标记
水位或水印(watermark
)一词,表示位置信息,即位移(offset
)。Kafka源码中使用的名字是高
水位,HW(high watermark)。
2、副本角色
Kafka分区使用多个副本(replica
)提供高可用
3、LEO和HW
每个分区副本对象都有两个重要的属性:LEO和HW。
- LEO:即日志末端位移(
log end offset
),记录了该副本日志中下一条消息的位移值。如果 LEO=10,那么表示该副本保存了10条消息,位移值范围是[0, 9]。另外,Leader LEO和Follower LEO的更新是有区别的。 - HW:即上面提到的水位值。对于同一个副本对象而言,其HW值不会大于LEO值。小于等于 HW值的所有消息都被认为是“已备份”的(replicated)。Leader副本和Follower副本的HW 新不同。
上图中,HW值是7,表示位移是 0~7 的所有消息都已经处于“已提交状态”(committed),而LEO 值是14,8~13的消息就是未完全备份(fully replicated)——为什么没有14?LEO指向的是下一条消息到来时的位移。
消费者无法消费分区下Leader副本中位移大于分区HW的消息。