丨LEO:Log End Offset
在 kafka 里面。无论 leader partition 还是 follower partition 统一都叫做副本 (replica)
每次 replica 接受到一条消息,都会更新自己的 LEO,也就是 log end offset,LEO 其实就是最新的 offset + 1
丨HW:High Water Mark
LEO 有一个很重要的功能就是更新 HW,HW 之前的数据对消费者是可见,消息属于 commit 状态。HW 之后的消息消费者消费不到
丨LEO 和 HW 更新流程
producer 发送请求写数据 leader partition 将数据写到磁盘。写完后更新 LEO 的值为:当前最新的 offset + 1 follower partition 向 leader partition 拉取数据,同时带上自己的 LEO 值 leader partition 收到 follower partition 发过来的 LEO 值后更新 ISR 列表 中 replica 的 LEO 值,同时判断是否要扩展维护的 ISR 列表 leader partition HW 值可能会发生变化:取维护的 ISR 列表所有 replica 中 LEO 的最小值 leader partition 将数据返回,同时带上当前的 HW 值 follower partition 收到数据后将数据写到磁盘。写完后更新 LEO 的值为:当前最新的 offset + 1 更新 HW 值为:min(LEO, HW)。取 leader partition 返回的 HW 值和自己当前的 LEO 值的最小值

文章转载自半夏大师兄,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




