一、相关概念

备份相关的角色

Kafka消息备份分三个角色:分别是Leader副本、Follower副本、ISR集合

Leader副本

负责直接响应client端的读写请求,即和生产者和消费者直接对接,生产者生产一条消息,直接进入Leader副本;

Follower副本

作为特殊消费者,被动的接收leader副本中的数据。注意:follower副本不能响应client端的读写请求;

ISR集合

与leader保持同步的follower,属于ISR副本集合(同步的备份集合),反过来说,在某个时刻,还在被动接收接收,不是和leader完全一致的,不能属于ISR副本集合,同步完成后才属于ISR集合;

ISR集合作用

在当前Leader不可用时,Kafka集群会从ISR集合中选取一个Follower升级为新Leader;通过维护ISR集合,一个拥有(N+1)个备份的Topic可用容忍N个备份不可用

二、实现机制

0.11之前副本备份机制主要依赖水位(或水印)的概念,而0.11采用了leader epoch来标识备份进度。
水位或水印(watermark)一词,也可称为高水位(high watermark),通常被用在流式处理领域(比如Apache Flink、Apache Spark等),以表征元素或事件在基于时间层面上的进度。一个比较经典的表述为:流式系统保证在水位t时刻,创建时间(event time) = t'且t' ≤ t的所有事件都已经到达或被观测到。在Kafka中,水位的概念反而与时间无关,而是与位置信息相关。严格来说,它表示的就是位置信息,即位移(offset)。

每个Kafka副本对象都有两个重要的属性:LEO和HW。注意是所有的副本,而不只是leader副本。

LEO:即日志末端位移(log end offset),记录了该副本底层日志(log)中下一条消息的位移值。注意是下一条消息!也就是说,如果LEO=10,那么表示该副本保存了10条消息,位移值范围是[0, 9]。另外,leader LEO和follower LEO的更新是有区别的。我们后面会详细说

HW:即上面提到的水位值。对于同一个副本对象而言,其HW值不会大于LEO值。小于等于HW值的所有消息都被认为是“已备份”的(replicated)。同理,leader副本和follower副本的HW更新是有区别的,我们后面详谈。

我们使用下图来形象化地说明两者的关系:

上图中,HW值是7,表示位移是0~7的所有消息都已经处于“已备份状态”(committed),而LEO值是15,那么8~14的消息就是尚未完全备份(fully replicated)——为什么没有15?因为刚才说过了,LEO指向的是下一条消息到来时的位移,故上图使用虚线框表示。我们总说consumer无法消费未提交消息。这句话如果用以上名词来解读的话,应该表述为:consumer无法消费分区下leader副本中位移值大于分区HW的任何消息。这里需要特别注意分区HW就是leader副本的HW值。

下图详细的说明了当producer生产消息至broker后,ISR以及HW和LEO的流转过程:

最新文章

  1. 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发
  2. Nexus3.0.0+Maven的使用(二)
  3. C#开发可以可视化操作的windows服务
  4. 空间复杂度是什么?What does ‘Space Complexity’ mean? ------geeksforgeeks 翻译
  5. objective-C 中两种实现动画的方法(转)
  6. RS485接线 - 为什么要给2线制RS485接3根线?
  7. (转)function($){}(window.jQuery) 是什么意思?
  8. win10 iis 创建新站点注意事项
  9. 如何安装chrome扩展?比如json-handle插件如何安装
  10. MVC分层含义与开发方式
  11. 【medium】78. Subsets
  12. Mysql_安装
  13. K3 WISE 开发插件《SQL语句WHERE查询-范围查询/模糊查询》
  14. a超链接之返回顶部的两种实现方法
  15. 【论文笔记】Social Role-Aware Emotion Contagion in Image Social Networks
  16. 使用 WebSphere ILOG JRules 开发保险应用系统
  17. Unity用代码实现Remove Missing Script
  18. js之create()
  19. Oracle数据库通过DBLINK实现远程访问
  20. RCF库ClientStub.setAutoReconnect

热门文章

  1. 原生Js监听普通dom尺寸变化
  2. SQLServer 不允许保存更改的解决办法
  3. Win8 Metro(C#)数字图像处理--3.4图像信息熵计算
  4. 内存可用性判断 IsBadCodePtr IsBadReadPtr 等等
  5. 利用shell脚本实现计划任务功能 V1.2
  6. Oracle序列使用:建立、删除、使用
  7. “真正的工作不是说的天花乱坠”,Torvalds 说, “而是在于细节”(Torvalds 认为成功的项目都是99%的汗水和1%的创新)
  8. 网络包抓取开发包 Npcap
  9. SQLite实现内存键值存储
  10. ACL FAQ