1. 分区副本机制(数据冗余)
这个是高可用的基础,核心是“将partition的副本分散在不同的Broker中”,由kafka自动分配(replica.assignment.strategy 调整分配策略)
- 一个 Partition 的所有副本不会落在同一个 Broker(避免 Broker 宕机导致副本全失);
- 尽量将副本均匀分布在集群的不同机架(Rack)(避免机架故障,可选配置
rack.aware.assignment.enable=true)
副本角色分工(严格职责分离,保证效率):
| 角色 | 核心职责 | 读写权限 |
|---|---|---|
| Leader 副本 | 处理所有生产者写入、消费者读取请求 | 可读可写 |
| Follower 副本 | 实时从 Leader 同步消息(拉取模式),保持数据一致 | 只读(仅同步) |
关键逻辑:生产者 / 消费者仅与 Leader 交互,Follower 不处理业务请求,仅负责数据同步,避免多副本并发读写的一致性问题,同时提升读写性能。
2. Leader 选举机制(故障恢复核心)
-
目标: Leader 副本故障时(Broker 宕机),快速从 Partition 的 Follower 中选出新 Leader,确保服务不中断。
-
核心依赖:
-
ISR(In-Sync Replicas): 与 Leader 数据同步状态合格的副本集合(包含 Leader 自身)。判断标准:
- 与 Leader 网络连通(未断连超过
replica.lag.time.max.ms,默认 10s)。 - 消息滞后量极小(
replica.lag.max.messages默认-1,仅用时间判断)。
- 与 Leader 网络连通(未断连超过
-
Controller: 集群中一个被选举出的 Broker,负责协调所有 Leader 选举。
-
-
选举触发: Leader 所在 Broker 宕机(心跳超时检测)、网络分区恢复(可选)、手动触发。
-
选举流程(由 Controller 主导):
- Controller 检测到 Leader 失效。
- 优先从 ISR 中 按照“优先副本”(创建时的首个副本)原则选举新 Leader,保证新 Leader 数据与原 Leader 一致。
- 极端情况 (ISR 为空): 由
unclean.leader.election.enable控制(默认false,禁止选举非 ISR 副本,避免数据丢失;设为true可能导致数据不一致但能恢复服务)。 - Controller 将新 Leader 信息同步至全集群,客户端自动切换。
-
特点: 快速(Controller 集中协调,<100ms)、数据一致(优先 ISR)。
3. 数据一致性保障(避免丢失)
-
生产者确认机制(ACKs): 控制生产者何时认为消息发送成功,平衡可靠性和性能:
acks=0: 不等待确认。可靠性最低(可能丢失),性能最高。适用非关键日志。acks=1: Leader 写入即确认。中等可靠性(Leader 故障后未复制的消息可能丢失),中等性能。适用一般业务。acks=all/-1: 需 ISR 中min.insync.replicas个副本同步完成才确认。最高可靠性(无丢失),性能最低。适用核心业务(如金融)。
-
关键配合:
acks=all必须搭配min.insync.replicas(e.g., 副本数=3, min.insync=2)。确保即使一个副本故障,写入仍能成功,避免单点故障导致阻塞。 -
副本同步基础: Follower 主动从 Leader 拉取(Pull)消息进行同步,保证数据最终一致。
3、Controller高可用(集群协调无单点)
-
Controller选举: 集群启动时,所有的Broker节点向zookeeper竞争创建临时节点 /controller,创建成功的Broker成为Controller
-
故障转移: 若原Controller宕机,zookeeper会删除临时节点,其他的Broker检测到后竞争创建/Controller,快速选举Controller
-
核心职责:除了 Leader 选举,还负责:
- 监控 Broker 上下线,更新集群元数据;
- 处理 Partition 扩容、副本重分配等操作;
- 将集群元数据(Leader 分布、ISR 列表等)同步到所有 Broker。
总结
Kafka 高可用的核心逻辑是「分区副本冗余 + Leader 选举 + 数据同步确认」:
- 分区副本分散在不同的Broker中,避免单点故障
- Leader-follower分工明确,保证读写效率,follower同步数据提供冗余
- Controller协调Leader选举,实现故障自动转移(毫秒级恢复)
- 生产者ack机制+ISR机制同步+高水位、保证数据不丢失、不重复。