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

news2025/4/7 20:05:50

文章目录

  • 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.coloradmin.cn/o/2286569.html

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

相关文章

网关登录校验

网关登录校验 单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,不再共享数据。也就意味着每个微服务都需要做登录校验,这显然不可取。 鉴权思路分析 …

【C语言】在Windows上为可执行文件.exe添加自定义图标

本文详细介绍了在 Windows 环境下,如何为使用 GCC 编译器编译的 C程序 添加自定义图标,从而生成带有图标的 .exe 可执行文件。通过本文的指导,读者可以了解到所需的条件以及具体的操作步骤,使生成的程序更具专业性和个性化。 目录 1. 准备条件2. 具体步骤步骤 1: 准备资源文…

计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统 医疗大数据 机器学习 深度学习 人工智能 爬虫 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

商品信息管理自动化测试

目录 前言 一、思维导图 二、代码编写 1.在pom.xml文件中添加相关依赖 2.自动化代码编写 三、代码测试 小结 前言 1. 针对商品信息管理项目进行测试,商品信息管理项目主要有商品列表页、部门列表页、员工列表页,主要功能:对商品信息的…

【实践】基于SakuraLLM的离线日文漫画及视频汉化

介绍 LLM 大型语言模型(英语:large language model,LLM),也称大语言模型,是由具有大量参数(通常数十亿个权重或更多)的人工神经网络组成的一类语言模型。在进行语言理解与分析&…

常见的同态加密算法收集

随着对crypten与密码学的了解,我们将逐渐深入学习相关知识。今天,我们将跟随同态加密的发展历程对相关算法进行简单的收集整理 。 目录 同态加密概念 RSA算法 ElGamal算法 ELGamal签名算法 Paillier算法 BGN方案 Gentry 方案 BGV 方案 BFV 方案…

SSM-MyBatis-总结

文章目录 一、Hello MyBatis1.1 流程1.2 总结 二、Crud 的一些注意点三、参数传递3.1 #{ } VS ${ }3.2 单、复参数传递(1)单参数(2)多参数 -- Param(3)总结 四、查询结果返回--结果封装4.1 ResultType 一般…

万字长文总结前端开发知识---JavaScriptVue3Axios

JavaScript学习目录 一、JavaScript1. 引入方式1.1 内部脚本 (Inline Script)1.2 外部脚本 (External Script) 2. 基础语法2.1 声明变量2.2 声明常量2.3 输出信息 3. 数据类型3.1 基本数据类型3.2 模板字符串 4. 函数4.1 具名函数 (Named Function)4.2 匿名函数 (Anonymous Fun…

Flutter android debug 编译报错问题。插件编译报错

下面相关内容 都以 Mac 电脑为例子。 一、问题 起因:(更新 Android studio 2024.2.2.13、 Flutter SDK 3.27.2) 最近 2025年 1 月 左右,我更新了 Android studio 和 Flutter SDK 再运行就会出现下面的问题。当然 下面的提示只是其…

【Proteus仿真】【51单片机】简易计算器系统设计

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键​ 3、可以进行简单的加减乘除运算 4、最大 9999*9999 二、使用步骤 系统运行后,LCD1602显示数据,通过矩阵按键…

JavaScript函数中this的指向

总结:谁调用我,我就指向谁(es6箭头函数不算) 一、ES6之前 每一个函数内部都有一个关键字是 this ,可以直接使用 重点: 函数内部的 this 只和函数的调用方式有关系,和函数的定义方式没有关系 …

51单片机入门_01_单片机(MCU)概述(使用STC89C52芯片;使用到的硬件及课程安排)

文章目录 1. 什么是单片机1.1 微型计算机的组成1.2 微型计算机的应用形态1.3 单板微型计算机1.4 单片机(MCU)1.4.1 单片机内部结构1.4.2 单片机应用系统的组成 1.5 80C51单片机系列1.5.1 STC公司的51单片机1.5.1 STC公司单片机的命名规则 2. 单片机的特点及应用领域2.1 单片机的…

51单片机入门_02_C语言基础0102

C语言基础部分可以参考我之前写的专栏C语言基础入门48篇 以及《从入门到就业C全栈班》中的C语言部分,本篇将会结合51单片机讲差异部分。 课程主要按照以下目录进行介绍。 文章目录 1. 进制转换2. C语言简介3. C语言中基本数据类型4. 标识符与关键字5. 变量与常量6.…

时间轮:XXL-JOB 高效、精准定时任务调度实现思路分析

大家好,我是此林。 定时任务是我们项目中经常会遇到的一个场景。那么如果让我们手动来实现一个定时任务框架,我们会怎么做呢? 1. 基础实现:简单的线程池时间轮询 最直接的方式是创建一个定时任务线程池,用户每提交一…

人工智能如何驱动SEO关键词优化策略的转型与效果提升

内容概要 随着数字化时代的到来,人工智能(AI)技术对各行各业的影响日益显著,在搜索引擎优化(SEO)领域尤为如此。AI的应用不仅改变了关键词研究的方法,而且提升了内容生成和搜索优化的效率&…

【NLP251】NLP RNN 系列网络

NLP251 系列主要记录从NLP基础网络结构到知识图谱的学习 1.原理及网络结构 1.1RNN 在Yoshua Bengio论文中( http://proceedings.mlr.press/v28/pascanu13.pdf )证明了梯度求导的一部分环节是一个指数模型…

【越学学糊涂的Linux系统】Linux指令篇(二)

一、pwd指令: 00x0:打印该用户当前目录下所属的文件路径 看指令框可以看出我用的是一个叫sw的用户,我们的路径就是在一个home目录下的sw目录下的class113文件路径。 也可以说是指出当前所处的工作目录 补充:🎆​​​​​​​Wi…

【AI论文】Omni-RGPT:通过标记令牌统一图像和视频的区域级理解

摘要:我们提出了Omni-RGPT,这是一个多模态大型语言模型,旨在促进图像和视频的区域级理解。为了在时空维度上实现一致的区域表示,我们引入了Token Mark,这是一组在视觉特征空间中突出目标区域的标记。这些标记通过使用区…

Java面试题2025-并发编程基础(多线程、锁、阻塞队列)

并发编程 一、线程的基础概念 一、基础概念 1.1 进程与线程A 什么是进程? 进程是指运行中的程序。 比如我们使用钉钉,浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。 …

Three城市引擎地图插件Geo-3d

一、简介 基于Three开发,为Three 3D场景提供GIS能力和城市底座渲染能力。支持Web墨卡托、WGS84、GCJ02等坐标系,支持坐标转换,支持影像、地形、geojson建筑、道路,植被等渲染。支持自定义主题。 二、效果 三、代码 //插件初始化…