首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kafka-Leader分区(AR +ISR + OSR)

Kafka-Leader分区(AR +ISR + OSR)

作者头像
运维小路
发布2025-06-07 17:17:18
发布2025-06-07 17:17:18
4510
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了中间件:Zookeeper,本章将介绍另外一个中间件:Kafka。目前这2个中间件都是基于JAVA语言的。

上个小节我们介绍了Topic的分区(Partition)和副本(Replica),今天我们这个小节就来详细介绍这个分区的详细信息。

在 Apache Kafka 中,每个分区都有Leader分区和Follower分区,Leader 分区 是负责处理客户端读写请求的主副本,其副本管理机制通过 AR(Assigned Replicas)ISR(In-Sync Replicas)OSR(Out-of-Sync Replicas) 确保数据的高可用性和一致性。以下是详细说明:

1. AR(Assigned Replicas)

AR 是分区的所有副本集合,包括 Leader 和 Follower 副本。这些副本分布在不同的 Broker 上,用于实现数据冗余和容错。由 Kafka 动态分配,确保副本分布在不同的 Broker 上(避免单点故障)。副本数量由 replication.factor 配置决定(默认 1,生产环境建议 ≥3)。

2. Leader 分区

功能定义:每个分区的主副本,负责处理所有客户端(生产者/消费者)的读写请求。维护 ISR 列表,监控 Follower 副本的同步状态。协调副本间的数据复制(Follower 从 Leader 拉取数据)。

选举机制:当 Leader 失效时,Kafka 控制器(Controller)从 ISR 中选举新的 Leader。若 ISR 为空,根据 unclean.leader.election.enable 配置决定是否允许从非 ISR 副本选举(可能丢失数据)。

3. ISR(In-Sync Replicas)

当前与 Leader 保持同步的副本集合。只有 ISR 中的副本才可能被选举为 Leader。Follower 副本的进度(HW, High Watermark)与 Leader 的差距不超过阈值。在 replica.lag.time.max.ms(默认 10 秒)内与 Leader 保持心跳。生产者可通过 acks=all 确保消息被所有 ISR 副本确认后才视为提交。ISR 中的副本是数据一致性和高可用的核心保障。

4. OSR(Out-of-Sync Replicas)

未能及时与 Leader 同步的副本集合。这些副本可能因网络延迟、Broker 故障或高负载暂时落后。Follower 副本在 replica.lag.time.max.ms 内未追上 Leader就是从ISR变成OSR。OSR 中的副本重新追上 Leader 后,会被重新加入 ISR。

5. 核心流程与配置

(1) 数据同步流程
  1. 生产者向 Leader 发送消息。
  2. Leader 将消息写入本地日志。
  3. Follower 副本从 Leader 拉取消息并写入本地。
  4. Leader 更新 HW(所有 ISR 副本已复制的最大偏移量)。
  5. 消费者只能读取到 HW 之前的消息。(Leader LEO = 100,Follower1 LEO = 95,Follower2 LEO = 90 → HW = 90。消费者只能读取到 Offset ≤ 90 的消息)。
(2) 关键配置

配置项

说明

replication.factor

分区副本总数(AR 的数量)。

min.insync.replicas

最小 ISR 副本数,若 ISR 副本数不足,生产者 acks=all 会写入失败。

replica.lag.time.max.ms

Follower 副本最大允许落后时间,超时则移出 ISR(默认 10 秒)。

unclean.leader.election.enable

是否允许从非 ISR 副本选举 Leader(默认 false,避免数据丢失)。

(3) 故障恢复示例
  • 场景:Leader 宕机,ISR 中有副本 A 和 B。
  • 恢复:Kafka 控制器从 ISR(A 或 B)选举新 Leader。
  • 若 ISR 为空:若 unclean.leader.election.enable=true,可能选举 OSR 副本,但可能导致数据丢失。
代码语言:javascript
复制
#查看Topic详细信息,就可以看到分区,Leader,AR,ISR等信息 
./bin/kafka-topics.sh  \
--bootstrap-server 192.168.31.143:9092 \
--describe --topic my-topic123

如果不使用--topic my-topic123,则会列出所有Topic详细信息。

代码语言:javascript
复制
Topic: my-topic123	TopicId: ntenNeGLTyeadW58Z9iwPg	PartitionCount: 3	ReplicationFactor: 3	Configs: segment.bytes=1073741824
	Topic: my-topic123	Partition: 0	Leader: 2	Replicas: 2,1,0	Isr: 0,1,2
	Topic: my-topic123	Partition: 1	Leader: 0	Replicas: 1,0,2	Isr: 0,1,2
	Topic: my-topic123	Partition: 2	Leader: 0	Replicas: 0,2,1	Isr: 0,1,2
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. AR(Assigned Replicas)
    • (1) 数据同步流程
    • (2) 关键配置
    • (3) 故障恢复示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档