更多内容,前往 IT-BLOG

leader epoch 代表 Leader 的纪元信息(epoch),初始值为0。每当 Leader 变更一次,leader epoch 的值就会加1,相当于为 Leader 增设了一个版本号。每个副本中还会增设一个矢量 <LeaderEpoch >= StartOffset>,其中 StartOffset 表示当前 LeaderEpoch 下写入的第一条消息的偏移量

假设有两个节点A 和 B,B是 leader节点,里面的数据如图:

A发生重启之后,A不是先忙着截断日志而是先发送 OffsetsForLeaderEpochRequest请求给B,B作为目前的 Leader在收到请求之后会返回当前的 LEO(LogEndOffset,注意图中 LE0和 LEO的不同),与请求对应的响应为OffsetsForLeaderEpochResponse。如果 A 中的 LeaderEpoch(假设为 LE_A)和 B 中的不相同,那么 B 此时会查找 LeaderEpoch 为 LE_A+1 对应的 StartOffset 并返回给 A

如上图所示,A 在收到2之后发现和目前的 LEO 相同,也就不需要截断日志了,以此来保护数据的完整性。

再如,之后 B 发生了宕机,A 成为新的 leader,那么对应的 LE=0 也变成了 LE=1,对应的消息 m2 此时就得到了保留。后续的消息都可以以 LE1 为 LeaderEpoch 陆续追加到 A 中。这个时候A就会有两个LE,第二 LE所记录的 Offset从2开始。如果B恢复了,那么就会从 A中获取到 LE+1的 Offset为 2的值返回给B。

再来看看 LE如何解决数据不一致的问题:当前 A 为 Leader,B 为 Follower,A 中有2条消息 m1 和 m2,而 B 中有1条消息 m1。假设 A 和 B 同时“挂掉”,然后 B 第一个恢复过来并成为新的 leader。

之后 B 写入消息 m3,并将 LEO 和 HW 更新至2,如下图所示。注意此时的 LeaderEpoch 已经从 LE0 增至 LE1 了。


紧接着 A 也恢复过来成为 Follower 并向 B 发送 OffsetsForLeaderEpochRequest 请求,此时 A 的 LeaderEpoch 为 LE0。B 根据 LE0 查询到对应的 offset 为1并返回给 A,A 就截断日志并删除了消息 m2,如下图所示。之后 A 发送 FetchRequest 至 B 请求来同步数据,最终A和B中都有两条消息 m1 和 m3,HW 和 LEO都为2,并且 LeaderEpoch 都为 LE1,如此便解决了数据不一致的问题。

leader epoch相关推荐

  1. Kafka(Go)教程(十二)---Kafka 中的高水位和 Leader Epoch 机制

    来自:指月 https://www.lixueduan.com 原文:https://www.lixueduan.com/post/kafka/12-hw-leader-epoch/ 本文解释了 Ka ...

  2. Kafka可靠性之HW与Leader Epoch

    <深入理解Kafka:核心设计与实现原理>是基于2.0.0版本的书 在这本书中,终于看懂了笔者之前提过的几个问题 准备知识 1.leader里存着4个数据:leader_LEO.leade ...

  3. kafka-27关于高水位和Leader Epoch)

    kafka-27关于高水位和Leader Epoch

  4. 取本地数据_深入理解Kafka服务端之Follower副本如何同步Leader副本的数据

    一.场景分析Kafka采用的是主写主读的方式,即客户端的读写请求都由分区的Leader副本处理,那么Follower副本要想保证和Leader副本数据一致,就需要不断地从Leader副本拉取消息来进行 ...

  5. kafka的epoch

    kafka新版本为了解决HW&LEO的同步机制更新缺陷,引入了Epoch的概念. Leader epoch 分两部分组成: Epoch : 版本号.每当副本领导权发生变更时,都会增加该版本号. ...

  6. zookeeper(五)集群角色epoch的选取

    在zookeeper的第三篇有个流程图,不知道是否还有印象. 这个图在刚开始是非常抽象的.现在就可以对照这个图来说一下源码来的流程了. 因为上一篇已经讲解了zookeeper怎么选取leader的,所 ...

  7. Zookeeper源码解析-Leader/Follower节点的启动

    前言: 前一篇文章介绍了Leader节点的选举过程,选举完成之后,集群中的各节点根据选举结果设置当前结果为LEADER或FOLLOWING. 设置完成之后,根据各自的节点状态进行启动服务.本文主要介绍 ...

  8. 2021年大数据ELK(十九):使用FileBeat采集Kafka日志到Elasticsearch

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 使用FileBeat采集Kafka日志到Elasticsearch 一.需求分 ...

  9. Kafka High Availability (下)

    摘要 本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场景,如Broker failover,Controller failover,Topic创建/删除,Broker ...

  10. Kafka核心设计与实践原理总结:进阶篇

    作者:未完成交响曲,资深Java工程师!目前在某一线互联网公司任职,架构师社区合伙人! kafka作为当前热门的分布式消息队列,具有高性能.持久化.多副本备份.横向扩展能力.我学习了<深入理解K ...

最新文章

  1. bzoj 2006 [NOI2010]超级钢琴 rmq+堆
  2. 从壹开始前后端分离【 .NET Core2.2 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储+服务+抽象接口模式...
  3. madplay 操作步骤
  4. 密码学系列之:memory-bound函数
  5. r vector 4 elements_Vector类与Enumeration接口
  6. 查看、关闭当前服务器上启动服务 / 进程
  7. 海龟交易法则07_如何衡量风险
  8. 接入网NFV引入路径:CPE、OLT和BNG或将率先云化
  9. (原创)javascript进阶(三)
  10. 【转】javascript代码混淆和压缩
  11. ubuntu启动时的初始化信息二
  12. 没注意开源软件的文档和对应版本号,悲剧了
  13. Eclipse安装WindowsBuilder失败解决方法
  14. C语言数据结构、十字链表的分析及实现
  15. protel99实用基础入门教程
  16. 瞳孔中的视觉刺激提取大脑中ERD/ERS
  17. 80后应该负重致远 [转自空瓶子]
  18. 英剧《反击》中有意思的镜头
  19. android 视频剪切,安卓手机视频剪辑app 将视频某一段截取下来,或者删除视频中某一部分...
  20. 关于javaweb项目不能删除jir包解决

热门文章

  1. MB/T 2020/4/9-技术创新方法·概述
  2. 图书馆管理系统(PHP期末报告)
  3. 保留两位小数除法算式_小数除法计算题100道
  4. linux 磁盘序列号修改,linux 获取硬盘序列号解决思路
  5. 做一晚黄牛能坑多少昧心钱?
  6. Lab3:自行车码表
  7. 北京车展:长城、高合、现代、东风悦达起亚等知名车企展示行业最新产品和技术...
  8. css 页面设计,60个精品CSS网页设计欣赏
  9. intel 服务器芯片型号怎么看,Intel CPU编号详解
  10. 一句话,连上隔壁老王家的 WiFi !