kafka replication副本

  • 所谓副本,通产指分布式系统中不同机器中保存相同的数据拷贝,本质就是一个只能追加写消息的提交日志
  • 提供数据冗余。即使系统部分组件失效,系统依然能够继续运转,因而增加了整体可用性以及数据持久性。
  • 提供高伸缩性。支持横向扩展,能够通过增加机器的方式来提升读性能,进而提高读操作吞吐量。
  • 改善数据局部性。允许将数据放入与用户地理位置相近的地方,从而降低系统延时。

假如kafka一个主题有3个分区3个副本部署在三台Broker上,在实际生产环境中,每台 Broker 都可能保存有各个主题下不同分区的不同副本,因此,单个 Broker 上存有成百上千个副本的现象是非常正常的。

关键性问题:如何保证副本中的数据是一致的?

kafka采用了常见的解决方案:基于领导者(Leader-based)的副本机制

这样做的优缺点:

  • 没能提供读操作横向扩展以及改善局部性。
  • 方面实现立即读Read-your-writes,写完就能读到
  • 方面实现单调读Monotonic Reads,同一消费者,多次消费消息,不会看到某条消息一会存在一会儿不存在

kafka同步副本集合In-sync Replicas(ISR)

如何定义同步,追随者副本到底在什么条件下才算与 Leader 同步。kafka引入了同步副本ISR集合,ISR 中的副本都是与 Leader 同步的副本,凡是在ISR集合中的副本都认为是同步的。

上图中哪些follower副本是同步的,kafka it depends,视情况而定,不一定是严格的相同

  • Broker参数replica.lag.time.max.ms ,默认10秒钟
  • 如果一个follower在这个时间内没有发送fetch请求或消费leader日志到结束的offset,leader将从ISR中移除这个follower,并认为这个follower已经挂了

倘若该副本后面慢慢地追上了 Leader 的进度,那么它是能够重新被加回 ISR 的。这也表明,ISR 是一个动态调整的集合,而非静态不变的。

如果ISR为空该如何选举

因为 Leader 副本天然就在 ISR 中,如果 ISR 为空了,就说明 Leader 副本也挂掉了,此时该怎么选举新 Leader 。

Kafka 把所有不在 ISR 中的存活副本都称为非同步副本。通常来说,非同步副本落后 Leader 太多,如果选择这些副本作为新 Leader,就可能出现数据丢失的情况。在 Kafka 中,选举这种副本的过程称为 Unclean 领导者选举。

Broker 端参数 unclean.leader.election.enable 控制是否允许 Unclean 领导者选举。
如果想保证数据的一致性,禁用Unclean。

一个分布式系统通常只能同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)中的两个。显然,在这个问题上,Kafka 赋予你选择 C 或 A 的权利。
ISR副本同步机制

与 Leader 副本保持同步的条件有两个:

1.该远程 Follower 副本在 ISR 中。

2.该远程 Follower 副本 LEO 值落后于 Leader 副本 LEO 值的时间,不超过 Broker 端参数 replica.lag.time.max.ms 的值。如果使用默认值的话,就是不超过 10 秒。

  • Committed Message:已提交消息,已经被所有ISR同步的消息。

  • Lagging Message:未提交消息,没有达到所有ISR同步的消息。

  • Hight Watermark:副本高水位值,表示分区中最新一条已提交(Committed)的消息的Offset。位移值等于高水位的消息也属于未提交消息。也就是说,高水位上的消息是不能被消费者消费的。

  • LEO:Log End Offset,Leader中最新消息的Offset,它表示副本写入下一条消息的位移值。

  • 高水位和 LEO 是副本对象的两个重要属性。Kafka 所有副本都有对应的高水位和 LEO 值,而不仅仅是 Leader 副本。只不过 Leader 副本比较特殊,Kafka 使用 Leader 副本的高水位来定义所在分区的高水位。换句话说,分区的高水位就是其 Leader 副本的高水位

kafka高水位更新机制

Kafka 所有副本都有对应的高水位和 LEO 值,在 Leader 副本所在的 Broker 上,还保存了其他 Follower 副本的 LEO 值。

leader副本更新HW和LEO流程:

1.处理生产者请求的逻辑如下:

  • 获取 Leader 副本所在 Broker 端保存的所有远程副本 LEO 值{LEO-1,LEO-2,……,LEO-n}。
    获取 Leader 副本高水位值:currentHW。
  • 更新 currentHW = min(currentHW, LEO-1,LEO-2,……,LEO-n)。
  • 写入消息到本地磁盘。
  • 更新分区高水位值。

2.处理 Follower 副本拉取消息的逻辑如下:

  • 读取磁盘(或页缓存)中的消息数据。
  • 使用 Follower 副本发送请求中的位移值更新远程副本 LEO 值。
  • 更新分区高水位值(具体步骤与处理生产者请求的步骤相同)

Follower 副本更新HW和LEO流程

从 Leader 拉取消息的处理逻辑如下:a.获取 Leader 发送的高水位值:currentHW。b.获取步骤 2 中更新过的 LEO 值:currentLEO。c.更新高水位为 min(currentHW, currentLEO)。c1.写入消息到本地磁盘。c2. 更新 LEO 值。c3.更新高水位值。

下一节预告

  • kafka副本同步机制Leader Epoch

推荐阅读

  • 深入浅出kafka原理-1-初识只作乍见之欢
  • 深入浅出kafka原理-2-Kafka为何那么快(高效)
  • 深入浅出kafka原理-3-高效文件存储设计特点

深入浅出kafka原理-5-kafka同步副本ISR高低水位HW相关推荐

  1. kafka详解(JAVA API操作kafka、kafka原理、kafka监控)-step2

    1.JAVA API操作kafka  修改Windows的Host文件: 目录:C:\Windows\System32\drivers\etc (win10) 内容: 192.168.40.150 k ...

  2. 【kafka原理】kafka Log存储解析以及索引机制

    本文设置到的配置项有 名称 描述 类型 默认 num.partitions topic的默认分区数 int 1 log.dirs 保存日志数据的目录.如果未设置,则使用log.dir中的值 strin ...

  3. Kafka原理+操作+实战

    Kafka原理+操作+实战 前面我和大家交流了kafka的部署安装.对于部署安装这都是小意思,不值得太多的提及.重点还是需要知道kafka原理.熟练掌握kafka命令以及灵活用于kafka场景. 干货 ...

  4. Kafka 原理简介

    Kafka 原理简介 Kafka 是一种高吞吐的分布式发布订阅的消息系统,可以处理消费者规模的网站中的动作流数据,具有高性能的,持久化,多副本,横向扩展能力. https://www.cnblogs. ...

  5. Kafka系列之:深入理解Kafka 主题、分区、副本、LEO、ISR、HW、Kafka的主写主读和分区leader选举

    Kafka系列之:深入理解Kafka 主题.分区.副本.LEO.ISR.HW.Kafka的主写主读和分区leader选举 一.Kafka重要知识点提炼 二.详细介绍Kafka 主题.分区.副本.LEO ...

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

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

  7. KafKa - 分区副本ISR选举机制

    一.KafKa分区副本ISR选举机制 kafka 中每一个主题又进一步划分成若干个分区.副本的概念实际上是在分区层级下定义的,每个分区配置有多若干个副本. 所谓的副本,本质上就是一个只能追加写消息的提 ...

  8. 深入浅出kafka原理-1-初识只作乍见之欢

    目录 前言: 1.由来 2.特点 3.使用场景 4.两种模式 1.Kafka名词解释 2.Kafka历史由来 版本号 3.Kafka术语 前言: 1.由来 为什么使用消息队列? 从系统之间有通信需求开 ...

  9. 深入浅出kafka原理-2-Kafka为何那么快(高效)

    目录 前言:Kafka为何那么快(高效) 1.文件系统 2.降低时间复杂度 3.零拷贝 4.下一节预告 前言:Kafka为何那么快(高效) 利用磁盘顺序写的优势 预读取后写入 尽量避免使用 in-me ...

最新文章

  1. php 如何利用 soap调用.Net的WebService asmx文件
  2. Five Hundred Miles——The Innocence Mission
  3. arduino 中断例程
  4. 面向接口编程详解(三)——模式研究
  5. 从Softmax回归到Logistic回归
  6. CentOS 6.5高可用集群LVS+Keepalived
  7. ctfshow-WEB-web4
  8. 如何在《救赎之路》中使用CPU粒子效果
  9. 通过JS+DIV+CSS排版布局实现选项卡效果
  10. ArcGIS Server10.2服务启动不了之http://localhost:6080/arcgis/manager无法打开之arcMap 无法打开6080admin问题解决之路
  11. vsftpd的参数说明和虚拟用户配置
  12. 读程士宏《测度论和概率论基础》
  13. Linux常用命令:scp命令
  14. microbiomeViz:绘制lefse结果中Cladogram
  15. MDK 使用 ST-Link 下载出现 target dll has been cancelled 的错误的解决方法
  16. 操作系统基础(存储管理)
  17. 0055-【生物数据库】-如何进行RNA差异基因KEGG注释分析-kobas在线分析
  18. [转]用Eclipse进行可视化Java界面设计
  19. vscode调试nodejs不要太爽啊
  20. 创建crawl—scrapy

热门文章

  1. 为什么需要职场软实力
  2. 基于IPSAN的存储典型备份方案
  3. RabbitMQ 限流 流量削峰
  4. CentOS6 安装Tomcat7
  5. 什么是单反相机,和普通相机有什么区别
  6. [JSOI2016]扭动的回文串
  7. 文字禅、看话禅、默照禅与念佛禅(轉)
  8. 人工智能之深度学习常见应用方向你都了解吗?(文末包邮送书5本)
  9. JS--数据类型--渡一教育(视频笔记)
  10. CRM管理系统软件哪家好?