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.rhkb.cn/news/9761.html

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

相关文章

java求职学习day18

常用的设计原则和设计模式 1 常用的设计原则(记住) 1.1 软件开发的流程 需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级 1.2 常用的设计原则 (1)开闭原则(Open Close Principle…

github制作静态网页

打开gihub并新建仓库 命名仓库:xxx.github.io 点击create repository进行创建 点击蓝色字体“creating a new file”创建文件 文件命名为index.html, 并编写html 右上角提交 找到setttings/pages,修改路径,点击保存,等…

shell脚本

Shell内容讲解 一、Shell 脚本基础概念 什么是 Shell 脚本? Shell 脚本是一个包含一系列 Shell 命令的文本文件,用于自动化执行任务(如文件操作、程序调用、系统管理等)。 Shell 类型 bash(Bourne-Again Shell&#…

python:斐索实验(Fizeau experiment)

斐索实验(Fizeau experiment)是在1851年由法国物理学家阿曼德斐索(Armand Fizeau)进行的一项重要实验,旨在测量光在移动介质中的传播速度。这项实验的结果对当时的物理理论产生了深远的影响,并且在后来的相…

16.Word:石油化工设备技术❗【28】

目录 题目 NO1.2 NO3 NO4 题目 NO1.2 F12:另存为将“Word素材.docx”文件另存为“Word. docx”(“docx”为文件扩展名) 光标来到表格上方→插入→形状→新建画布→单击选中→格式→高度/宽度(格式→大小对话框→取消勾选✔锁定…

计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设

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

DeepSeek-R1本地部署笔记

文章目录 效果概要下载 ollama终端下载模型【可选】浏览器插件 UIQ: 内存占用高,显存占用不高,正常吗 效果 我的配置如下 E5 2666 V3 AMD 590Gme 可以说是慢的一批了,内存和显卡都太垃圾了,回去用我的新设备再试试 概要 安装…

zyNo.19

哈希(md5)绕过问题 本质上是弱类型问题的延申 题型 登录的哈希验证 $a ! $b Md5($a) md5($b) 解决办法Md5绕过 var_dump ("0e123456" "0e4456789"); //true 0e545993274517709034328855841020//true 参考资料0e开头的哈希…

爬虫基础(一)HTTP协议 :请求与响应

前言 爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。 今天的HTTP协议,会有助于我们更好的了解网络。 一、什么是HTTP协议 (1)定义 HTTP(超文本传输协议&#xff…

XCTF - IllIntentions wp

做 ctf 每天都是踩坑的一天 文章目录 题目概述我的做法frida hook 题目概述 这道题本身逻辑不复杂,有一个 MainActivity 和三个二级 Activity IsThisTheRealOne, ThisIsTheRealOne, DefinitelyNotThis。主 activity 是空白页面,注册了一个 Receiver Sen…

LNMP架构

一、概述 LNMP架构是一种常用于搭建动态网站的服务器架构组合,其名称由以下四个组件的首字母缩写组成: Linux:操作系统。Linux具有开源、稳定、安全、高性能等特点,是服务器领域广泛使用的操作系统。它为其他组件提供了运行环境和…

【Unity3D】实现2D角色/怪物死亡消散粒子效果

核心:这是一个Unity粒子系统自带的一种功能,可将粒子生成控制在一个Texture图片网格范围内,并且粒子颜色会自动采样图片的像素点颜色,之后则是粒子编辑出消散效果。 Particle System1物体(爆发式随机速度扩散10000个粒…

芯片AI深度实战:基础篇之langchain

基于ollama, langchain,可以构建一个自己的知识库,比如这个 Build Your Own RAG App: A Step-by-Step Guide to Setup LLM locally using Ollama, Python, and ChromaDB | HackerNoon 这是因为: 以上范例就实现了这样一个流程: 系列文章&…

mybatis(134/134)完结

一级缓存(默认情况下开启)同一个sqlsession中执行相同的查询语句走一级缓存 二级缓存 :同一个sqlsessionfactory,sqlsession关闭了才会将一级缓存提交到二级缓存中 外部编写的缓存 PageHelper插件:方便进行分页&#x…

C++,STL 简介:历史、组成、优势

文章目录 引言一、STL 的历史STL 的核心组成三、STL 的核心优势四、结语进一步学习资源: 引言 C 是一门强大且灵活的编程语言,但其真正的魅力之一在于其标准库——尤其是标准模板库(Standard Template Library, STL)。STL 提供了…

不背单词快捷键(不背单词键盘快捷键)

文章目录 不背单词快捷键 不背单词快捷键 ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ        ‌‍ᅟᅠ    …

EasyExcel写入和读取多个sheet

最近在工作中,作者频频接触到Excel处理,因此也对EasyExcel进行了一定的研究和学习,也曾困扰过如何处理多个sheet,因此此处分享给大家,希望能有所帮助 目录 1.依赖 2. Excel类 3.处理Excel读取和写入多个sheet 4. 执…

JavaScript函数中this的指向

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

【C语言】内存函数

一、前言 在C语言中有着常见的内存函数,他们可以对内存进行操作,即可以修改内存的内容等,下面我们来简略地学习一下 二、memcpy(内存复制) cpy是复制的意思,顾名思义,就是将一块指定大小的内存的字节逐一赋值到新的内…

fscan全家桶更新:fscan免杀版,可过360、火绒、微步云沙箱,其他的自行测试

前言 fscan全家桶更新:fscan免杀版,可过360、火绒、微步云沙箱,其他的自行测试 其他版本 FscanPlus:fscan的plus版本 fs:有免杀效果 fscan低版本:自己重新编译的适合低版本系统的fscan FscanParser&a…