Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)

文章目录

  • Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)
  • 1. 副本的基本概念
  • 2. 副本同步和一致性
    • 2.1 AR(Assigned Replicas)
    • 2.2 ISR(In-Sync Replicas)
    • 2.3 OSR(Out-of-Sync Replicas)
    • 2.4 HW(High Watermark)
    • 2.5 LEO(Log End Offset)
    • 2.6 简单事例理解HW与LEO的关系
  • 3. 副本的工作流程
  • 4. 副本同步的关键参数
  • 5. 副本同步常见问题
    • 5.1 副本滞后(Replica Lag)
    • 5.2 副本丢失(Replica Loss)
    • 5.3 ISR (In-Sync Replica) 不一致
    • 5.4 副本数量不足(Under-replicated Partitions)
    • 5.5 副本重新分配失败
    • 5.6 领导者选举延迟
    • 5.7 副本同步时间长*
    • 5.8 副本丢失或被移出 ISR
    • 5.9 副本配置不当

Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)

Kafka 的副本机制是其高可用性和容错性的核心之一,它确保在发生故障时数据不会丢失,同时允许系统继续提供服务。副本机制通过将每个分区的数据复制到多个 Broker 上,保证了即使某个 Broker 宕机,数据仍然可以通过其他 Broker 访问。

1. 副本的基本概念

  • 副本(Replica):每个 Kafka 分区都会有多个副本,这些副本分布在不同的 Broker 上。副本包括:
    • 领导者副本(Leader Replica):每个分区只能有一个领导者副本,负责处理生产者的写入请求和消费者的读取请求。领导者副本是所有客户端请求的入口。
    • 追随者副本(Follower Replica):其他副本是追随者副本,追随者副本的任务是从领导者副本同步数据。追随者副本不直接处理客户端的读写请求,它们仅用于数据的备份。

在这里插入图片描述

2. 副本同步和一致性

Kafka 在数据存储和分布式消息传递中使用了多个概念和指标来描述消息的状态、副本的同步情况,以及如何处理消费者的读取。以下是这些概念和指标的详细介绍:

2.1 AR(Assigned Replicas)

定义:

  • AR(Assigned Replicas) 代表的是 Kafka 分区的 所有副本,包括领导者副本(Leader Replica)和所有追随者副本(Follower Replicas)。

作用:

  • AR 列表表示分区的副本拓扑,显示所有属于该分区的副本。
  • AR 中的副本包括 ISR 中的副本和 OSR 中的副本。也就是说,AR 包括所有的副本,無論它們是否同步。

举例:
假设 Kafka 分区有 3 个副本:

  • 领导者副本:r1
  • 追随者副本:r2r3

那么,AR 列表就是 [r1, r2, r3]。无论 r2r3 是否与领导者同步,都会包含在 AR 列表中。

2.2 ISR(In-Sync Replicas)

定义:

  • ISR(In-Sync Replicas) 代表的是与 Kafka 分区 领导者副本同步 的副本。只有同步副本才被认为是与领导者保持一致的副本,并且能够承载新的写入操作。

作用:

  • ISR 是 Kafka 中保证数据一致性和高可用性的重要机制,所有写入操作都需要同步到 ISR 中的副本。
  • 如果副本不能及时同步数据,它将被移出 ISR 列表。

举例:
假设分区有 3 个副本:r1(领导者)、r2r3。如果 r1r2 保持同步,而 r3 延迟了很长时间并未同步,它会被从 ISR 中移除。此时,ISR 列表[r1, r2]

2.3 OSR(Out-of-Sync Replicas)

定义:

  • OSR(Out-of-Sync Replicas) 代表的是那些滞后于领导者副本的副本,即它们未能及时同步领导者的日志,因而不在 ISR 列表中。

作用:

  • OSR 副本无法保证数据一致性,因为它们不能及时同步数据。
  • Kafka 会尽可能让这些副本重新同步,以便它们可以重新加入 ISR 列表。

举例:
如果 r3 因网络问题滞后于 r1,它会被认为是 OSR,并从 ISR 中移除。直到它追赶上领导者副本,才会重新加入 ISR。

2.4 HW(High Watermark)

定义:

  • HW(High Watermark) 是 Kafka 中的一个关键指标,它表示 Kafka 分区中所有副本(特别是 ISR 中的副本)已经 确认并同步最高偏移量。简单来说,HW 是 Kafka 中最新已被写入的、所有副本均已同步的消息偏移量。

作用:

  • HW 代表了 Kafka 集群的 已提交数据的最大偏移量,即所有同步副本能够确认并读取的最大偏移量。
  • 只有偏移量小于或等于 HW 的消息才对消费者可见。
  • 高水位线的更新会影响消费者的读取位置,只有当消息的偏移量小于或等于 HW 时,消费者才能读取该消息。

举例:
假设 Kafka 分区的领导者副本 r1 写入了偏移量 1000,并且此时该消息已同步到 ISR 中的所有副本(例如 r2r3)。此时,HW 为 1000,意味着所有副本都已经确认并能够读取该消息。

2.5 LEO(Log End Offset)

定义:

  • LEO(Log End Offset) 是 Kafka 分区 当前日志的末尾偏移量。它代表 Kafka 分区中 最后一条消息的偏移量

作用:

  • LEO 用来描述一个分区的日志进度,表示分区日志中所有消息的 最大偏移量
  • 它帮助 Kafka 管理分区中的消息存储,因为当 LEO 被更新时,意味着新的消息被写入分区。

举例:
假设 Kafka 分区的日志写入了 1500 条消息,那么 LEO 就是 1500,表示这是该分区最新写入的偏移量。如果一个消费者的偏移量是 1499,那么它会尝试消费 1500 之后的消息。

2.6 简单事例理解HW与LEO的关系

  1. 开始分区存在3个副本,此时HW和LEO的值都为3;
    在这里插入图片描述
  2. 生产者将消息写入Leader副本后,follower副本进行消息同步;
    在这里插入图片描述
    3.同步过程中,leader副本的LEO为8,follower0的LEO为6,follower1的LEO为5;当前分区的HW最小值为5;
    在这里插入图片描述
    4.等待同步完成,LEO和HW的值为8。
    在这里插入图片描述

3. 副本的工作流程

  1. 生产者写入数据

    • 生产者将消息发送到分区的领导者副本。领导者副本接收并写入数据。
    • 领导者副本将写入的数据同步到所有的追随者副本。同步方式是异步的,即领导者副本会先处理生产者的请求,而不是等待所有追随者副本完成同步。
  2. 消费者读取数据

    • 消费者只能从领导者副本读取数据。领导者副本确保它的数据是最新的且与其他副本同步一致。
  3. 副本同步过程

    • 每个追随者副本定期从领导者副本拉取日志数据。追随者副本会确保其存储的数据与领导者副本的数据一致。
    • 追随者副本会记录日志的偏移量,每次同步时,更新其当前的偏移量。

4. 副本同步的关键参数

  • replication.factor:每个分区的副本数量,通常设置为 3,表示每个分区有 3 个副本(1 个领导者副本,2 个追随者副本)。
  • min.insync.replicas:指定一个分区在进行生产者写入时,必须有多少个副本是同步的。若少于这个数量,写入请求将被拒绝。这个配置确保了数据的一致性和高可用性。
  • unclean.leader.election.enable:是否允许未同步副本作为领导者进行选举。通常该配置为 false,表示只有 ISR 中的副本才能被选为新的领导者。
  • replica.lag.time.max.ms:副本同步最大容忍延迟时间。如果副本的同步延迟超过该时间,它将被移出 ISR。

5. 副本同步常见问题

Kafka 副本机制是确保数据可靠性和高可用性的重要机制。副本机制通过将每个分区的数据复制到多个 broker 上,保证即使某个 broker 或分区失败,数据依然可以从其他副本中恢复。然而,在实际生产环境中,副本机制可能会遇到一些常见问题。以下是 Kafka 副本机制的一些常见问题及其解决方案。

5.1 副本滞后(Replica Lag)

问题描述:
副本滞后是指某个追随者副本(Follower Replica)没有及时跟上领导者副本(Leader Replica)的数据更新,导致其数据落后。副本滞后通常是由网络延迟、磁盘性能问题、资源瓶颈等原因引起的。

可能影响:

  • 消费者读取时可能会读取到过时的数据。
  • 如果副本滞后太久,可能导致不可用副本,从而影响 Kafka 集群的可用性和数据一致性。
  • 写入请求可能会因副本不足而失败。

解决方案:

  • 增强网络带宽,优化数据传输速率。
  • 提升硬件性能,特别是磁盘 I/O 性能(使用 SSD 而非 HDD)。
  • 合理配置副本同步参数,如 replica.fetch.max.bytesreplica.fetch.wait.max.ms 等。
  • 在负载高峰期间,考虑增加集群资源,扩展 broker 数量。

5.2 副本丢失(Replica Loss)

问题描述:
副本丢失是指某个副本(特别是追随者副本)在集群故障时丢失数据。副本丢失通常发生在 Kafka broker 突然崩溃或由于磁盘损坏、网络分区等问题导致无法与领导者副本同步。

可能影响:

  • 数据丢失,尤其是在副本配置为 min.insync.replicas 的情况下,若副本数不足,生产者可能会失败,造成数据丢失。
  • 消费者可能会读取不到数据,导致消费者进度回退。

解决方案:

  • 配置 min.insync.replicas,确保在写入时必须有足够的副本处于同步状态。
  • 启用持久化存储,避免副本因磁盘丢失而导致数据丢失。
  • 定期进行数据备份,防止因硬件故障造成的数据丢失。
  • 使用分区和副本的负载均衡,确保副本的分布均匀,降低单点故障的风险。

5.3 ISR (In-Sync Replica) 不一致

问题描述:
ISR 是指副本队列中与领导者副本同步的副本。如果一个副本滞后过多,或者无法正常与领导者同步,则该副本会被从 ISR 列表中移除。ISR 不一致通常是由于网络延迟、磁盘瓶颈、或者配置不当等原因导致的。

可能影响:

  • 如果 ISR 中的副本数低于 min.insync.replicas 配置,生产者会因为写入确认失败而收到 NotEnoughReplicasException 错误。
  • 如果副本数量不足,可能会导致数据丢失或集群不可用。

解决方案:

  • 配置合理的 min.insync.replicas 值,确保每个分区至少有两个副本处于同步状态。
  • 定期检查 ISR 状态,确保副本处于同步状态。
  • 优化 Kafka 集群的网络性能和磁盘 I/O 性能,减少副本同步的延迟。

5.4 副本数量不足(Under-replicated Partitions)

问题描述:
当某个分区的副本数不足时(即副本数量低于预期值),会出现 “Under-replicated Partitions” 的情况。可能由于副本丢失、broker 故障、或者 ISR 不一致等原因导致。

可能影响:

  • 数据的可靠性降低,部分副本不可用时可能导致写入失败。
  • Kafka 会报告 “Under-replicated Partitions”,提醒运维人员某些分区的副本数量不够。

解决方案:

  • 定期监控 Kafka 集群的 “Under-replicated Partitions” 状态。
  • 在生产环境中,至少为每个分区配置两个副本。
  • 如果副本不足,手动触发副本恢复或增加新的 broker 进行数据平衡。

5.5 副本重新分配失败

问题描述:
副本重新分配是指将分区的副本从一个 broker 移动到另一个 broker 的过程。这个过程可能由于磁盘满、网络问题或者节点故障而失败。

可能影响:

  • 副本分布不均匀,可能导致集群负载不平衡。
  • 如果副本重新分配失败,可能导致某些分区的副本数不足。

解决方案:

  • 监控 Kafka 的负载情况,确保副本分配均匀。
  • 使用 Kafka 自带的工具进行副本重新分配,或者手动触发分配过程。
  • 检查 Kafka 的 broker 日志,识别是否存在硬件瓶颈或配置问题。

5.6 领导者选举延迟

问题描述:
Kafka 的领导者副本是负责处理分区读写请求的副本。领导者副本可能会因为某些原因(如故障或重新选举)需要重新选举。这会导致领导者选举的延迟,进而影响到整个分区的可用性。

可能影响:

  • 写入请求可能会被暂时阻塞,导致生产者写入失败。
  • 消费者可能暂时无法消费该分区的消息。

解决方案:

  • 配置合理的 unclean.leader.election.enable,避免在副本同步尚未完成时强制进行领导者选举。
  • 使用可靠的硬件和网络,避免因硬件故障导致领导者选举频繁发生。
  • 使用 min.insync.replicas 配置来限制仅在副本同步的情况下进行领导者选举。

5.7 副本同步时间长*

问题描述:
副本同步时间过长通常是由于生产者写入数据的速度过快,或者副本(追随者)无法及时处理传输的数据。这可能由于磁盘 I/O 性能差、网络瓶颈、资源竞争等因素导致。

可能影响:

  • 副本同步延迟可能会导致消费者读取数据时读取到不一致的数据。
  • 如果副本滞后时间过长,可能会影响到分区的可靠性和写入的确认机制。

解决方案:

  • 使用更高性能的硬件,特别是更快的磁盘(如 SSD)。
  • 优化 Kafka 配置参数,例如 replica.fetch.max.bytes,提高副本同步的效率。
  • 通过增加 Kafka broker 节点来分担负载,确保副本同步不受资源瓶颈的限制。

5.8 副本丢失或被移出 ISR

问题描述:
当副本因为滞后过多或者某些原因无法及时与领导者副本同步时,它会被移出 ISR(In-Sync Replicas)列表。如果某些副本长时间未能同步,它们可能会被永久丢失或移出 ISR。

可能影响:

  • 数据可靠性降低,特别是在某些副本长时间滞后时。
  • 如果副本丢失或移出 ISR,生产者会因缺少足够副本而出现 NotEnoughReplicasException 错误。

解决方案:

  • 确保 min.insync.replicas 设置合理,防止副本滞后导致写入失败。
  • 定期监控 ISR 状态,及时发现副本滞后问题。
  • 使用 Kafka 的分区和副本重新分配工具,确保副本分布均匀,避免单个节点的故障影响整个分区。

5.9 副本配置不当

问题描述:
副本配置不当可能会导致 Kafka 集群的可用性下降,例如设置过低的副本数、配置不合理的副本同步参数等。

可能影响:

  • 副本数过低会增加数据丢失的风险。
  • 副本同步参数配置不当可能导致副本同步延迟或失败。

解决方案:

  • 为每个分区配置至少两个副本。
  • 通过监控工具定期检查副本的同步状态。
  • 配置合理的副本同步参数,确保副本能及时同步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】_MVC架构与三层架构

目录 1. MVC架构 2. 三层架构 3. MVC架构与三层架构的对比 3.1 MVC与三层架构的对比 3.2 MVC与三层架构的共性 1. MVC架构 在前文已介绍关于SpringMAC的设计模式,详见下文: 【JavaEE】_Spring Web MVC简介-CSDN博客文章浏览阅读967次,点…

【Matlab高端绘图SCI绘图模板】第006期 对比绘柱状图 (只需替换数据)

1. 简介 柱状图作为科研论文中常用的实验结果对比图,本文采用了3组实验对比的效果展示图,代码已调试好,只需替换数据即可生成相关柱状图,为科研加分。通过获得Nature配色的柱状图,让你的论文看起来档次更高&#xff0…

【QT】 控件 -- 显示类

🔥 目录 [TOC]( 🔥 目录) 1. 前言 2. 显示类控件2.1 Label 1、显示不同文本2、显示图片3、文本对齐、自动换行、缩进、边距4、设置伙伴 3.2 LCD Number 3.3 ProgressBar 3.4 Calendar Widget 3. 共勉 🔥 1. 前言 之前我在上一篇文章【QT】…

前端-Rollup

Rollup 是一个用于 JavaScript 的模块打包工具,它将小的代码片段编译成更大、更复杂的代码,例如库或应用程序。它使用 JavaScript 的 ES6 版本中包含的新标准化代码模块格式,而不是以前的 CommonJS 和 AMD 等特殊解决方案。ES 模块允许你自由…

网络直播时代的营销新策略:基于受众分析与开源AI智能名片2+1链动模式S2B2C商城小程序源码的探索

摘要:随着互联网技术的飞速发展,网络直播作为一种新兴的、极具影响力的媒体形式,正逐渐改变着人们的娱乐方式、消费习惯乃至社交模式。据中国互联网络信息中心数据显示,网络直播用户规模已达到3.25亿,占网民总数的45.8…

STM32调试手段:重定向printf串口

引言 C语言中经常使用printf来输出调试信息,打印到屏幕。由于在单片机中没有屏幕,但是我们可以重定向printf,把数据打印到串口,从而在电脑端接收调试信息。这是除了debug外,另外一个非常有效的调试手段。 一、什么是pr…

利用飞书机器人进行 - ArXiv自动化检索推荐

相关作者的Github仓库 ArXivToday-Lark 使用教程 Step1 新建机器人 根据飞书官方机器人使用手册,新建自定义机器人,并记录好webhook地址,后续将在配置文件中更新该地址。 可以先完成到后续步骤之前,后续的步骤与安全相关&…

混合专家模型MoE的全面详解

什么是混合专家(MoE)? 混合专家(MoE)是一种利用多个不同的子模型(或称为“专家”)来提升LLM质量的技术。 MoE的两个主要组成部分是: 专家:每个前馈神经网络&#xff08…

基于Arcsoft的人脸识别

目录 一、前言 二、使用方法 三、获取SDK 四、人脸检测/人脸识别 五、代码实现 一、前言 face++,百度ai,虹软,face_recognition,其中除了face_recognition是python免费的一个库安装好响应的库直接运行就好,另外三个需要填入相关申请的信息id和key。 分别对应着相应的人…

电梯系统的UML文档13

5.2.6 CarPositionControl 的状态图 图 24: CarPositionControl 的状态图 5.2.7 Dispatcher 的状态图 图 25: Dispatcher 的状态图 5.3 填补从需求到状态图鸿沟的实用方法 状态图能对类的行为,一个用例,或系统整体建模。在本文中,状态图…

Ollama windows安装

Ollama 是一个开源项目,专注于帮助用户本地化运行大型语言模型(LLMs)。它提供了一个简单易用的框架,让开发者和个人用户能够在自己的设备上部署和运行 LLMs,而无需依赖云服务或外部 API。这对于需要数据隐私、离线使用…

C++二叉树进阶

1.二叉搜索树 1.1二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一颗空树,或者具有以下性质的二叉树 若它的左子树不为空,则左子树上所有结点的值小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值…

亲测有效!解决PyCharm下PyEMD安装报错 ModuleNotFoundError: No module named ‘PyEMD‘

解决PyCharm下PyEMD安装报错 PyEMD安装报错解决方案 PyEMD安装报错 PyCharm下通过右键自动安装PyEMD后运行报错ModuleNotFoundError: No module named ‘PyEMD’ 解决方案 通过PyCharm IDE python package搜索EMD-signal,选择版本后点击“install”执行安装

2. Java-MarkDown文件解析-工具类

2. Java-MarkDown文件解析-工具类 1. 思路 读取markdown文件的内容&#xff0c;根据markdown的语法进行各个类型语法的解析。引入工具类 commonmark 和 commonmark-ext-gfm-tables进行markdown语法解析。 2. 工具类 pom.xml <!-- commonmark 解析markdown --> <d…

U盘打开提示格式化:深度解析与数据恢复全攻略

在数字化时代&#xff0c;U盘作为便捷的数据存储和传输工具&#xff0c;广泛应用于各个领域。然而&#xff0c;当我们满怀期待地插入U盘&#xff0c;却遭遇“U盘打开提示格式化”的尴尬局面时&#xff0c;那份焦虑与无助感油然而生。本文将全面剖析U盘打开提示格式化的原因、应…

HTB:Forest[WriteUP]

连接至HTB服务器并启动靶机 分配IP&#xff1a;10.10.16.21 靶机IP&#xff1a;10.10.10.161 靶机Domain&#xff1a;forest.htb 目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端…

芯片AI深度实战:实战篇之vim chat

利用vim-ollama这个vim插件&#xff0c;可以在vim内和本地大模型聊天。 系列文章&#xff1a; 芯片AI深度实战&#xff1a;基础篇之Ollama-CSDN博客 芯片AI深度实战&#xff1a;基础篇之langchain-CSDN博客 芯片AI深度实战&#xff1a;实战篇之vim chat-CSDN博客 芯片AI深度…

JavaScript - Web APIs(下)

日期对象 目标&#xff1a;掌握日期对象&#xff0c;可以让网页显示日期 日期对象&#xff1a;用来表示时间的对象 作用&#xff1a;可以得到当前系统时间 学习路径&#xff1a; 实例化 日期对象方法 时间戳 实例化 目标&#xff1a;能够实例化日期对象 在代码中发…

【安全测试】测开方向学习遇到的问题记录

【问题一】springboot如何访问静态资源文件 springboot启动根路径位置 F:\untitled05\demo4\src\main\resources\static 例如图片位置存放在F:\untitled05\demo4\src\main\resources\static即可 配置文件配置 spring.web.resources.static-locationsfile:/F:/untitled05/de…

Unity|小游戏复刻|见缝插针2(C#)

控制针的运动 新建一个Pin脚本 将Pin脚本拖到针Pin的下面 保存代码 using UnityEngine;public class Pin : MonoBehaviour {public float speed 5;private bool isFly false;private bool isReach false;private Transform startPosition;// Start is called once bef…