每个kafka副本对象都持有2个重要的属性:日志末端位移LEO,高水印HW

Kafka对leader副本和follower副本的LEO更新机制是不同的,后面我们会详细讨论。

Kafka对leader副本和follower副本的hw值更新机制也是不同的。

消费者无法消费分区leader副本上那些位移大于分区hw的消息。分区hw就是leader副本的hw值。

关于LEO

2套follower副本LEO属性:一套LEO值保存在follower副本所在broker的缓存上;另一套LEO值保存在leader副本所在的broker的缓存上。

follwer副本的LEO:每写一条消息就+1

leader上的副本LEO:收到FETCH请求之后,先从自己的log中读取相应的数据,但是在给follower返回数据之前它先去更新follower的LEO

关于HW(时机+算法)

follower更新hw:follower更新hw发生在其更新LEO之后,一旦follower向log写完数据,它就会尝试更新HW值,具体的算法就是比较当前LEO值与FETCH响应中leader的HW值,取两者的小者作为新的HW值。

leader更新hw的时机:

1.副本成为leader时

2.broker出现崩溃导致副本被踢出ISR时

3.producer向leader副本写入消息时

4.leader处理followerFETCH请求时:首先会从底层的log读取数据,之后再尝试更新分区HW值。

如何更新:

当确定分区hw时,它会选出所有满足条件的副本,比较他们的LEO,并选择最小的LEO值作为HW值,这里的满足条件主要是指副本满足一下两个条件之一:

1.出于ISR中

2.副本LEO落后于leaderLEO的时长不大于replica.lag.time.max.ms参数值(默认时10秒)

特殊情况:

Hw值的更新通常需要另一轮FETCH请求才能完成,故这种设计在本质上是存在缺陷的。可能引起,备份数据丢失,备份数据不一致。

fetch请求没有新消息时返回什么?leader会更新leo吗。答:follower发送过来的FETCH请求因为无数据而暂时被寄存到leader端的purgatory中,待500毫秒后超时会强制完成。

leader宕机时hw之外的消息会丢失?

hw在第二轮刚开始的时候宕机,新leader的没更新hw,这个时候它本地没有LEO,怎么更新hw。 是不是需要一轮其他副本fetch请求之后才能确定hw,和生成本地leo缓存。

基于·水印备份机制的缺陷:hw过期

在0.11.0.0版本之前,kafka一直使用基于水印的备份机制

1.数据丢失

前提:min.insync.replicas=1

follower副本在重启后将leo截断至hw(为什么要截断)。此时在给leader发FETCH,若leader此时宕机那么被截断的那部分就丢失了.

2.数据不一致/数据离散

前提:min.insync.replicas=1

A leo=2 hw=2,B leo=1 hw=1;AB同时挂掉,B先重连并且写入一条消息hw=2,A再重启后发现hw与分区相同,会不作调整继续工作。

0.11.0.0版本解决之道

leader epoch取代hw,leader端多开辟一段内存区域专门保存leader的epoch信息。

所谓leader epoch,实际上是一对值,epoch表示leader的版本号,从0开始,当leader变更过1次,epoch就会加1,而offset则对应与该epoch版本的leader写入第一条消息的位移,假设存在两对值(0,0)和(1,120)那么表示第一个leader从位移0开始写入消息,供血了120条。

每个leader broker中会保存这样一个缓存,并定期写入一个检查点文件中,当leader写滴成log时,它会尝试更新整个缓存--如果这个leader首次写消息,则会在缓存中增加一个条目,否则就不做更新,而每次副本重新成为leader时会查询这部分混存,获取对应leader版本的位移,这就不会发生数据不一致和丢失的情况。

这里offsetsForLeaderEpochRequest如果A在响应之前就宕机了怎么办

kafka入门之broker-水印和leader epoch的更多相关文章

  1. Kafka水位(high watermark)与leader epoch的讨论

    ~~~这是一篇有点长的文章,希望不会令你昏昏欲睡~~~ 本文主要讨论0.11版本之前Kafka的副本备份机制的设计问题以及0.11是如何解决的.简单来说,0.11之前副本备份机制主要依赖水位(或水印) ...

  2. Kafka设计解析(二十一)Kafka水位(high watermark)与leader epoch的讨论

    转载自 huxihx,原文链接 Kafka水位(high watermark)与leader epoch的讨论 本文主要讨论0.11版本之前Kafka的副本备份机制的设计问题以及0.11是如何解决的. ...

  3. kafka入门(三)备份

    一.相关概念 备份相关的角色 Kafka消息备份分三个角色:分别是Leader副本.Follower副本.ISR集合 Leader副本 负责直接响应client端的读写请求,即和生产者和消费者直接对接 ...

  4. kafka入门教程链接

    http://www.aboutyun.com/forum.php?mod=viewthread&tid=12882 经典入门教程 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创 ...

  5. 《OD大数据实战》Kafka入门实例

    官网: 参考文档: Kafka入门经典教程 Kafka工作原理详解 一.安装zookeeper 1. 下载zookeeper-3.4.5-cdh5.3.6.tar.gz 下载地址为: http://a ...

  6. kafka 入门笔记 #1

    kafka 入门笔记(#1) 单机测试 下载版本,解压 tar -xzf kafka_2.11-0.10.1.1.tgz cd kafka_2.11-0.10.1.1 启动服务 Kafka用到了Zoo ...

  7. 超详细“零”基础kafka入门篇

    1.认识kafka 1.1 kafka简介 Kafka 是一个分布式流媒体平台 kafka官网:http://kafka.apache.org/ (1)流媒体平台有三个关键功能: 发布和订阅记录流,类 ...

  8. Kafka入门 --安装和简单实用

    一.安装Zookeeper 参考: Zookeeper的下载.安装和启动 Zookeeper 集群搭建--单机伪分布式集群 二.下载Kafka 进入http://kafka.apache.org/do ...

  9. 项目17-超详细“零”基础kafka入门篇

    分类: Linux服务篇,Linux架构篇   1.认识kafka 1.1 kafka简介 Kafka 是一个分布式流媒体平台 kafka官网:http://kafka.apache.org/ (1) ...

随机推荐

  1. python 数据分析之pandas

    pandas 是数据分析时必须用到的一个库,功能非常强大 其有两种数据结构:一维Series   二维表DataFrame(一般读取后的数据都是df) 导入:import pandas as pd 数 ...

  2. oracle 存储过程深入学习与应用

    对于存储过程已经有过一周的学习时间了,但是之学到一些皮毛,争取根据基础,熟练后能进行深入. --1.存储过程创建存储过程的语法: CREATE [ OR REPLACE ] PROCEDURE pro ...

  3. css3滚动条样式美化

    关于滚动条的设计,需要用到css3的微元素,都列在下边吧(以Chrome内核webkit为例). -webkit-scrollbar     滚动条的整体轮廓,width表示纵向滚动条的宽度,heig ...

  4. vue封装tab切换

    vue封装tab切换 预览: 第一种 通过父传子标题,子传父事件 子组件 <template> <div class='app'> <div class="ta ...

  5. windows搭建ftp

    控制面板                此时输入电脑用户名和密码可在自己电脑访问,但是其它电脑不能访问 接下来防火墙允许的应用将FTP服务器打钩 控制面板\系统和安全\Windows Defender ...

  6. IDEA通过file-open打开以前的项目无法运行

    在学习java的过程中我们会建立很多项目,IDEA默认打开最近一次编辑的项目,当我们打开以前的项目时会发现run图标变成灰色了, 解决办法: 1. 手动设置src为根目录 选中src目录--右键--m ...

  7. gdb高级技巧

    注意: 这里是讲gdb的高级技巧.如果没有接触过gdb,请看这篇:点这里. gdb是一个功能极其强大的命令行调试器.其实,除了我们常用的 file b s n q disp p 等命令,也有很多高级技 ...

  8. leetcode99:n-queens

    题目描述 N皇后问题是把N个皇后放在一个N×N棋盘上,使皇后之间不会互相攻击. 给出一个整数n,返回n皇后问题的所有摆放方案 例如: 4皇后问题有两种摆放方案 [".Q..",  ...

  9. 谈谈对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)

    一.关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题. 1. 为什么redis能以单工作线 ...

  10. B/S图书管理系统

    B/S图书管理系统 系统管理 ①新用户注册 ②用户信息修改:修改信息,修改密码 ③锁定用户 ④注销用户 书籍管理 ①新书入库 ②借书办理 ③还书办理 ④书记注销 个人管理 ①图书查询 ②借书单查询 ③ ...