当前位置: 首页 > news >正文

Kafka的ISR、OSR、AR详解

Kafka中的ISR、OSR和AR是副本管理机制的核心概念,它们共同保障了Kafka的高可用性和数据一致性。下面我将详细解释这些概念及其相互关系。

1. 基本概念

1.1 AR (Assigned Replicas) - 分配副本

定义:一个分区的所有副本集合称为AR,即Kafka为主题分区分配的所有副本。

特点

  • 包含该分区的所有副本(Leader和Follower)
  • AR = ISR + OSR
  • 由Kafka控制器(Controller)负责管理分配

1.2 ISR (In-Sync Replicas) - 同步副本

定义:与Leader副本保持同步的副本集合(包括Leader自己)。

特点

  • 实时与Leader保持数据同步
  • 只有ISR中的副本才有资格被选举为Leader
  • 生产者消息需要被ISR中所有副本确认才算提交成功(取决于acks配置)

1.3 OSR (Out-of-Sync Replicas) - 非同步副本

定义:与Leader副本同步滞后过多的副本集合。

特点

  • 未能及时跟上Leader的同步进度
  • 不在ISR集合中
  • 当OSR副本重新追上Leader进度后,可以重新加入ISR

2. 工作机制详解

2.1 副本状态转换

[新副本] → [ISR] ↔ [OSR]
  • 新创建的副本初始加入ISR
  • 当副本滞后超过replica.lag.time.max.ms(默认30秒)时,从ISR移到OSR
  • 当OSR副本追上Leader进度后,重新加入ISR

2.2 同步判定标准

副本是否保持同步由以下参数控制:

  1. replica.lag.time.max.ms (默认30000ms)

    • Follower副本在此时间内未向Leader发送FETCH请求
    • 或在此时间内未追上Leader的最新offset
  2. replica.lag.max.messages (已弃用)

    • 旧版本用于判断消息滞后条数
    • 新版本已移除该配置

2.3 Leader选举

当分区Leader失效时:

  1. 只能从ISR集合中选举新Leader
  2. 如果ISR为空,根据unclean.leader.election.enable配置决定:
    • false(默认):不允许选举,分区不可用
    • true:可以从OSR中选举(可能丢失数据)

3. 配置参数

参数默认值说明
default.replication.factor1新建主题的默认副本数
min.insync.replicas1最小同步副本数(影响生产者acks=all时的可用性)
replica.lag.time.max.ms30000副本滞后时间阈值
unclean.leader.election.enablefalse是否允许从非同步副本选举Leader

4. 数据一致性保障

Kafka通过ISR机制实现不同级别的一致性:

  1. acks=0:不等待确认,可能丢失数据
  2. acks=1:仅等待Leader确认(默认)
  3. acks=all:等待ISR中所有副本确认

生产环境推荐配置:

min.insync.replicas=2
acks=all

这样即使一个副本失效,仍能保证数据安全。

5. 监控与管理

5.1 查看副本状态

使用kafka-topics命令:

bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test

输出示例:

Topic: test Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2
  • Replicas: AR列表(1,2,3)
  • Isr: 同步副本列表(1,2)
  • OSR = AR - ISR = 3

5.2 重要监控指标

  1. UnderReplicatedPartitions:非充分复制分区数(ISR < AR)
  2. IsrShrinksPerSec:ISR收缩次数(副本离开ISR)
  3. IsrExpandsPerSec:ISR扩展次数(副本加入ISR)

6. 生产环境建议

  1. 设置replication.factor≥3,保证高可用
  2. 设置min.insync.replicas=2,平衡可用性与一致性
  3. 监控ISR变化,异常时及时报警
  4. 避免频繁的Leader切换(配置合理的replica.lag.time.max.ms
  5. 保持unclean.leader.election.enable=false,防止数据丢失

7. 故障场景分析

场景1:Follower副本同步慢

  • 现象:某个Follower持续在OSR中
  • 可能原因:
    • 磁盘I/O瓶颈
    • 网络延迟
    • 机器负载过高
  • 解决方案:
    • 检查副本节点硬件状态
    • 优化Kafka JVM配置
    • 考虑替换问题节点

场景2:ISR频繁收缩/扩展

  • 现象:IsrShrinks/IsrExpands指标频繁变化
  • 可能原因:
    • replica.lag.time.max.ms设置过小
    • 网络不稳定
  • 解决方案:
    • 适当增大replica.lag.time.max.ms
    • 检查网络状况

通过合理配置和监控ISR机制,可以确保Kafka集群在保证数据一致性的同时,维持高可用性。

http://www.dtcms.com/a/336939.html

相关文章:

  • Rust学习笔记(六)|Rust 中的常用集合(Vector、String、HashMap)
  • Linux网络服务(一)——计算机网络参考模型与子网划分
  • 计算机网络:2、TCP和UDP
  • Golang context
  • CentOS 7 LAMP快速部署WordPress指南
  • 云原生Ansible渗透场景(⾃动化的运维⼯具)
  • Ansible企业及实战
  • OVS:除了Geneve和VXLAN,还有哪些虚拟化网络协议?
  • 云计算:企业数字化转型的核心引擎
  • 传统方式部署(RuoYi-Cloud)微服务
  • 一套GoldenGate → Kafka → Flink → MySQL 的端到端增量同步方案
  • 云计算学习100天-第17天
  • Linux学习-(进程间,线程间通信)
  • nuScence数据集
  • 计算机视觉 图像处理 在两张二值图中检测线条交集点的高效方法 适合工程图纸比对、生物神经元网络分析和文档特征提取等场景 ,
  • 20. 云计算-Service MeshServerless
  • 谷粒商城项目-P3简介-分布式基础概念
  • CloudBase AI ToolKit + VSCode Copilot:打造高效智能云端开发新体验
  • 【运维进阶】LNMP + WordPress 自动化部署实验
  • CMakeLists.txt 学习笔记
  • MariaDB/MySQL 客户端工具与服务端配置精要指南
  • C++---有符号和无符号整数的位移操作
  • 云原生俱乐部-mysql知识点归纳(1)
  • 《亚矩阵云手机重构出租接单:KVM 虚拟化与边缘计算驱动的设备替代技术路径》
  • 8.18决策树
  • 性能测试(Jemter)
  • grep命令要点、详解和示例
  • 基于nvm安装管理多个node.js版本切换使用(附上详细安装使用图文教程+nvm命令大全)
  • QT第九讲- 控件委托
  • Git智能合并机制深度解析