kafka的高可用核心机制

71 阅读3分钟

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,仅用时间判断)。
    • Controller: ‌ 集群中一个被选举出的 Broker,负责协调所有 Leader 选举。

  • 选举触发: ‌ Leader 所在 Broker 宕机(心跳超时检测)、网络分区恢复(可选)、手动触发。

  • 选举流程(由 Controller 主导):

    1. Controller 检测到 Leader 失效。
    2. 优先从 ISR 中‌ 按照“优先副本”(创建时的首个副本)原则选举新 Leader,保证新 Leader 数据与原 Leader 一致。
    3. 极端情况 (ISR 为空): ‌ 由 unclean.leader.election.enable 控制(默认 false,禁止选举非 ISR 副本,避免数据丢失;设为 true 可能导致数据不一致但能恢复服务)。
    4. 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 选举,还负责:

    1. 监控 Broker 上下线,更新集群元数据;
    2. 处理 Partition 扩容、副本重分配等操作;
    3. 将集群元数据(Leader 分布、ISR 列表等)同步到所有 Broker。

总结

Kafka 高可用的核心逻辑是「分区副本冗余 + Leader 选举 + 数据同步确认」:

  1. 分区副本分散在不同的Broker中,避免单点故障
  2. Leader-follower分工明确,保证读写效率,follower同步数据提供冗余
  3. Controller协调Leader选举,实现故障自动转移(毫秒级恢复)
  4. 生产者ack机制+ISR机制同步+高水位、保证数据不丢失、不重复。