Bootstrap

Kafka可靠性之HW与Leader Epoch

《深入理解Kafka:核心设计与实现原理》是基于2.0.0版本的书

在这本书中,终于看懂了笔者之前提过的几个问题

准备知识

1、leader里存着4个数据:leader_LEO、leader_HW、remote_LEO集合、remote_HW集合

2、follower里只保存自身的:follower_LEO、follower_HW

HW和LEO更新过程

假设:

1个leader 和 2个follower

此时:leader_LEO = 5、leader_HW = 0、所有 follower 的 follower_LEO = 0、follower_HW = 0

同步开始

1、follower向leader发送fetch请求,来拉取消息,这个fetch请求会带上各自的follower_LEO

(先省略leader处理fetch请求的过程)

2、leader接收fetch请求后,处理并返回,这个fetch请求的响应会带上 leader_HW

3、follower拿到了fetch请求的response,同步消息数据,更新自己的 follower_LEO

(假设此时 这2个 follower_HW 分别为3和4)

4、接下来计算一下 follower_HW 并更新

公式:follower_HW = min(leader_HW,follower_LEO) 

所以 两个follower此时的 follower_HW 都是 min(0,0) = 0

5、follower再次发送fetch请求,并带上各自的 follower_LEO

6、leader处理fetch请求过程如下

把这2个 follower_LEO 加上自己的 leader_LEO,取最小值作为新的 leader_HW

公式:leader_HW = min(leader_LEO,RemoteIsrLEO)

(RemoteIsrLEO:ISR中的所有follower的follower_LEO)

leader_HW = min(l5,3,4) = 3

7、leader_HW = 3 被 fetch请求的response带上,返回

8、2个follower收到response后,依然是,同步消息数据,更新 follower_LEO,更新 follower_HW

(假设此时 这2个 follower_HW 分别更新至 6和8)

follower_HW1 =  min(3,6) = 3

follower_HW2 =  min(3

;