Kafka 高可用架构完整详解(面试标准完整版,可直接录入知识库)
一、高可用核心依赖:分区 + 多副本 + ISR机制 + Leader选举 + HW高水位
Kafka高可用不靠单Broker,Topic拆分Partition,每个Partition多副本分散在不同Broker,单节点宕机不丢数据、服务不中断。
1.副本基础概念 AR集合
- AR(Assigned Replicas):分区全部副本列表,包含1个Leader + N个Follower。
- 副本分散规则:同一个Partition所有副本不能落在同一台Broker,机架部署时跨机架存放,规避整机/机架断电故障。
- Leader:负责所有生产写入、消费读取;Follower:不处理业务流量,只被动拉取Leader日志做数据同步。
二、ISR 核心机制(Kafka高可用灵魂)
1. ISR全称:In-Sync Replicas(同步副本集合)
ISR = Leader + 跟得上同步进度的Follower副本,滞后太多的Follower会被踢出ISR。
参数:replica.lag.time.max.ms(默认30s)
判断踢出规则:Follower连续30s无法拉取到新消息,判定同步滞后,移出ISR变为OSR;后续追上日志进度后,自动重新加入ISR。
- OSR(Out-of-Sync Replicas):滞后掉队副本,不参与Leader竞选。
2. acks参数与ISR联动(写入可靠性)
acks=1(默认):Leader写入本地磁盘即返回成功,不等待Follower同步;Leader瞬间宕机存在丢数风险。acks=all / -1:消息必须写入Leader,且全部ISR内副本同步完成,生产者才收到成功响应;最高可靠,ISR过少会阻塞生产。
极端:ISR只剩Leader 1个副本时,acks=all等价于acks=1。
三、LEO、HW、LeaderEpoch(保证副本数据一致性、防止宕机日志错乱)
1. LEO(Log End Offset)
每个副本自身日志最后一条消息的下一个偏移量,代表当前副本日志末尾位置;Leader/所有Follower各自维护独立LEO。
2. HW(High Watermark 高水位)
ISR集合中最小的LEO,就是分区HW。
- HW之前的消息:已同步到全部ISR副本,对外可见、可以被消费者消费;
- HW~Leader.LEO之间的数据:仅存在Leader,Follower未同步,消费者无法读取。
作用:Leader宕机,新Leader只能从HW位置对外提供服务,截断HW之后未同步数据,保证多副本数据一致。
3. Leader Epoch(Leader纪元,0.11版本后修复日志截断BUG)
每条日志携带当前Leader纪元编号,新Leader上任生成新Epoch;解决老版本Follower错误截断有效日志、数据丢失问题。
四、分区Leader故障自动切换(Controller负责)
1. Controller角色(KRaft/ZK两种架构)
- ZK架构:集群通过ZK抢锁选出唯一Controller Broker,监听所有Broker上下线事件;
- KRaft架构(新版本弃ZK):集群拆分Controller集群(元数据节点),元数据分区化,不再单点依赖ZK。
2. 宕机切换流程
- Broker宕机,ZK/RAFT感知节点下线,通知Controller;
- Controller检索故障分区的ISR列表,从ISR中挑选新Leader(优先选ISR内日志最新副本);
- 更新元数据,通知全集群元数据变更,生产者/消费者重连新Leader。
硬性规则:永远不从OSR掉队副本选举Leader,避免丢失大量数据。
极端场景:ISR全部副本宕机、无可用ISR → 分区不可读写,生产阻塞。
五、Broker集群容灾分层
- 单机宕机:分区副本分散其他节点,自动选新Leader,业务无感知;
- 机架故障:副本跨机架部署,同机架全挂,其余机架副本正常服务;
- 机房容灾:跨机房部署副本,配合MirrorMaker2做集群双活/异地灾备。
六、元数据高可用演进:ZK → KRaft
1. ZK架构短板
ZK只存储集群元数据、Controller注册、Broker注册;
- Controller单点,故障影响全集群元数据更新;
- ZK不存储消息数据,消息全在Broker磁盘。
2. KRaft架构(Kafka Raft)
- 拆分独立Controller节点,元数据以Raft协议多副本持久化在Controller集群;
- 去掉ZK依赖,元数据高可用,解决Controller单点故障瓶颈,新版本生产主流。
七、生产落地高可用配套方案
- 副本数配置:生产推荐分区副本数
replication-factor=3(1Leader+2Follower),兼顾可用性与磁盘成本; - 机架感知配置:开启broker.rack,副本自动跨机架均匀分布;
- acks规范:核心金融业务acks=all,高吞吐日志业务acks=1;
- 消费侧高可用:消费者组多实例部署,单个消费实例宕机触发Rebalance,剩余实例继续消费。
八、高频故障场景(面试题,入库格式)
tags: #Kafka #高可用 #面试
题目:ISR频繁收缩、生产者acks=all发送报错NotEnoughReplicas?
精简答案:Follower同步滞后被踢出ISR,ISR数量不足配置副本数;排查磁盘IO打满、网络延迟、Broker负载过高。
一句话背诵总结
Kafka依靠分区多副本分散部署+ISR同步机制+HW数据保护+Controller自动选主实现Broker层面高可用;KRaft通过Raft保证元数据高可用,副本数3是生产高可用标配。
需要继续讲 Rebalance故障、消息丢失/重复生产消费?
关联文档
- HW、LEO、LeaderEpoch 完整原理 — 副本同步机制
- Kafka 偏移量与高水位 — Offset/HW/LEO
- 优先副本与分区重分配 — 分区迁移