共计 766 个字符,预计需要花费 2 分钟才能阅读完成。
kafka 里的 HW(High Watermark)是与音讯 offset 相干的一个概念,本文会从上面这四个方面来开展。
- HW 的作用
- HW 的更新机制
- 正本同步机制解析
- leader epoch
HW 的作用
在 kafka 中,HW 的作用次要有 2 个:
- 定义音讯的可见性,即用来标识分区下的哪些音讯是能够被消费者生产的
- 帮忙 kafka 实现正本同步
假如这是某个分区 Leader 正本的 HW 图,咱们能够分明地看到‘已提交音讯’与‘未提交音讯’,在开展之前先解释下何为已提交音讯:
当 kafka 的若干个 broker 胜利地接管到一条音讯并写入到日志文件后,它们会通知生产者这条音讯已胜利提交,那么这条音讯就是‘已提交音讯’。留神这里应用的是若干个 broker,这个是由使用者配置决定的,使用者能够配置只有有一个 broker 胜利保留该音讯就算是已提交,也能够配置令所有 broker 都胜利保留该音讯才算是已提交。
回到 HW 上来, 在上图中已提交的音讯才会对消费者可见,才会被消费者拉取生产 。位移值等于高水位的音讯也属于未提交音讯,即高水位上的音讯是不能被消费者生产的。
图中还有一个日志末端的概念,Log End Offset(LEO)。它示意正本写入下一要音讯的位移值。留神,数字 15 所在的方框是虚线,这就阐明,这个正本以后只有 15 条音讯,位移值是从 0 到 14,下一条新音讯的位移是 15。显然,介于高水位和 LEO 之间的音讯就属于未提交音讯。这也从侧面通知了咱们一个重要的事实,那就是: 同一个正本对象,其高水位值不会大于 LEO 值 。
高水位和 LEO 是正本对象的两个重要属性。kafka 所有正本都有对应的高水位和 LEO 值,而不仅仅是 leader 正本。只不过 leader 正本比拟非凡,kafka 应用 leader 正本的高水位来定义所在分区的高水位。换句话说, 分区的高水位就是其 leader 正本的高水位。