kafka里的HW(High Watermark)是与音讯offset相干的一个概念,本文会从上面这四个方面来开展。

  1. HW的作用
  2. HW的更新机制
  3. 正本同步机制解析
  4. leader epoch

HW的作用

在kafka中,HW的作用次要有2个:

  1. 定义音讯的可见性,即用来标识分区下的哪些音讯是能够被消费者生产的
  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正本的高水位。