Kafka 高可用机制:Broker集群、分区副本、Leader与ISR
Kafka 高可用不是简单地“多部署几台机器”。真正让 Kafka 在节点故障后继续服务的是 Broker 集群、Partition 副本、Leader/Follower 复制和 ISR 机制。
一句话概括:Kafka 一个集群由多个 Broker 组成,一个 Topic 拆成多个 Partition,每个 Partition 有多个副本,其中一个 Leader 对外读写,其余 Follower 复制数据;Leader 故障后优先从 ISR 中选出新的 Leader。
Broker 集群
Kafka 服务端由多个 Broker 进程组成。一个 Broker 挂了,其他 Broker 仍然可以对外提供服务。
但 Broker 集群只是高可用基础。如果某个 Partition 只有一个副本,副本所在 Broker 挂了,这个分区仍然不可用。所以还需要分区副本机制。
分区副本机制
一个 Topic 可以有多个 Partition,每个 Partition 又可以有多个 Replica。
每个分区副本中会选出一个 Leader,其他副本是 Follower。
| 角色 | 作用 |
|---|---|
| Leader | 对外处理生产和消费请求 |
| Follower | 从 Leader 拉取数据,保持副本同步 |
正常情况下,生产者和消费者都和 Leader 交互,Follower 负责复制数据。
Leader 故障后怎么恢复
如果 Leader 所在 Broker 故障,Kafka 会从 Follower 中选出新的 Leader。
这个过程保证了单个 Broker 故障时,分区仍然有机会继续对外服务。
ISR 是什么
ISR 是in-sync replicas,表示和 Leader 保持同步的副本集合。
课件里把副本分成两类:
| 类型 | 含义 |
|---|---|
| ISR 副本 | 与 Leader 同步较及时,优先参与选主 |
| 普通副本 | 落后较多,不能优先保证数据完整 |
Leader 故障时,Kafka 会优先从 ISR 中选出新的 Leader,因为 ISR 中的副本数据更接近 Leader。
高可用和可靠性参数的关系
Kafka 高可用和消息可靠性经常一起考。
| 机制或参数 | 作用 |
|---|---|
| 多 Broker | 避免单点服务不可用 |
| 多 Partition | 提供并行能力,也便于分散到不同 Broker |
| 多 Replica | 分区数据多副本保存 |
| ISR | Leader 故障时优先选同步副本 |
acks=all | 等 ISR 副本确认后再向生产者返回成功 |
如果只有副本但生产者使用acks=1,Leader 收到消息后就返回成功,随后 Leader 宕机且 Follower 还没同步完成,消息仍然可能丢。所以高可靠通常要把副本机制和acks=all放在一起说。
面试回答模板
可以这样答:
Kafka 高可用可以从集群和复制机制两个层面回答。集群层面,一个 Kafka 集群由多个 Broker 组成,某台 Broker 宕机后,其他 Broker 仍然可以对外服务。复制层面,一个 Topic 会拆成多个 Partition,每个 Partition 可以配置多个副本,其中一个是 Leader,负责读写请求,其他是 Follower,从 Leader 同步数据。Leader 所在 Broker 宕机后,Kafka 会优先从 ISR,也就是和 Leader 保持同步的副本集合中选出新的 Leader,从而保证容错和高可用。为了提高消息可靠性,生产者通常还会配置
acks=all,让 ISR 副本都确认保存后再返回成功。
小结
Kafka 高可用的主线是:
把 Broker、Partition、Replica、Leader、ISR 的关系讲清楚,高可用这题就不会散。
