首页/数据/数据工程与 ETL 速查/副本滞后与离线分区处理
Kafka64 条

副本滞后与离线分区处理

UnderReplicatedPartitions 表示有副本落后,UnavailablePartitions 表示分区完全没有可用 Leader;两者处理顺序都是先恢复 Broker,再评估重分配,最后才考虑 unclean 选举。

两个指标代表什么

URP(UnderReplicatedPartitions)表示某个分区的副本落后于 leader,也就是 ISR 数量小于副本总数;UnavailablePartitions 更严重,表示分区连 leader 都没有了,读写直接失败。前者通常是性能与同步问题,后者已经是可用性事故。处理顺序有讲究:先恢复 broker 让副本自愈,再评估是否需要重分配,最后才考虑用 unclean 选举强行选出 leader——因为那一步会丢数据。

基本信息

URP副本落后,ISR 小于副本数,仍可读写
UnavailablePartitions分区无可用 leader,读写失败
常见诱因broker 掉线、磁盘写满、网络抖动、负载过高
观测方式主题 describe 命令与 JMX 指标
处理优先级恢复进程 > 修复资源 > 重分配 > unclean 选举

定位命令

定位命令
kafka-topics.sh --bootstrap-server localhost:9092 --describe --under-replicated-partitions
kafka-topics.sh --bootstrap-server localhost:9092 --describe --unavailable-partitions
# 对单个 broker 看运行与磁盘状态
systemctl status kafka
df -h /data/kafka
# 查看 ISR 是否在收缩
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders | head
  • 1. 掉线 Broker:优先拉起进程并观察 ISR 自愈
  • 2. 磁盘/网络异常:修复后副本会自动追平
  • 3. 长期不恢复:用 reassign 把副本迁到健康节点
  • 4. 全部副本不可用且业务可接受丢数据:才用 UNCLEAN 选举
  • 5. 恢复后复盘:确认是容量问题还是单点问题,补上监控告警

状态与动作对照

状态含义动作
URP 短暂出现后消失副本正在追赶观察即可,记录发生时间
URP 持续大于 0某副本长期落后查该 broker 磁盘与网络
URP 持续增长负载或容量不足评估扩容与限速
部分分区不可用全部副本落在故障节点恢复节点或重分配
需要 unclean 选举无可用副本可推进确认业务可接受丢数据后再执行
unclean 选举会丢未同步数据;执行前必须确认业务后果并留记录。
磁盘写满是最常见的 URP 诱因:broker 会停止写入并逐步落后,因此容量水位告警的价值往往高于事后排查副本状态。
发生故障时先记录时间点与当时的指标快照:URP 会在恢复后自动消失,事后只凭「现在看起来正常」很难定位根因。

易错点

  • 副本恢复慢时先查网络带宽与磁盘 IO,盲目重启 Broker 会打断追平过程
  • URP 长时间存在会影响 acks=all 的写入成功率,不能长期放任
  • 把所有副本都放在同一台机器或同一机架,节点故障直接导致分区不可用
  • 磁盘写满后只做清理不做容量规划,问题会周期性复发
  • 为尽快恢复而随意 unclean 选举,丢掉的数据事后难以界定影响范围

数据来源与参考

  • Apache Kafka 官方文档:Replication 与分区可用性
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌