Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Kafka 集群

1. Kafka 集群是什么?

Kafka 集群由多个 Broker 节点组成,它们共同承担:

  • 数据写入(Producer)
  • 数据读取(Consumer)
  • 存储数据(Log Segment)
  • 分区副本同步
  • Leader 选举
  • 元数据管理
  • 高可用与容错

一个生产级 Kafka 集群一般包含:

3–9 台 Broker(最小生产规格:3)
+ Zookeeper(或 KRaft 模式)

2. Kafka 集群关键组件

2.1 Broker

一台 Kafka 服务实例就是一个 Broker。

功能:

  • 保存分区数据
  • 响应 Producer 写请求
  • 响应 Consumer 读请求
  • 管理日志文件、段文件(segment)
  • 根据 Controller 指令完成 leader 迁移

一般建议至少 3–5 个 Broker。

2.2 Zookeeper / KRaft(元数据管理)

Kafka 有两种模式:

1. Zookeeper 模式(Legacy)

  • 目前企业使用最多
  • ZK 管理元数据(ISR、ACL、Broker 列表、Topic 配置)
  • Kafka 依赖 ZK 进行 Leader 选举

2. KRaft 模式(新架构,无需 Zookeeper)

  • 从 Kafka 2.8 开始引入
  • Kafka 自己存储元数据
  • 使用 Raft 协议保证一致性
  • 新版本未来将完全替代 ZK

若你准备新建集群,推荐直接使用 KRaft

3. Kafka 集群中的 Topic、Partition、Replica

3.1 Topic(主题)

一个 Topic 是数据的逻辑分类,如:

  • order
  • trade
  • user-login

3.2 Partition(分区)

Topic 会被拆分为多个分区,以提升吞吐和并发。

例如:

Topic A = 6 partitions

数据分布在不同 Broker:

Partition Broker
p0 1
p1 2
p2 3
p3 1
p4 2
p5 3

3.3 Replica(副本)

每个分区可以有多个副本:

replication-factor=3   # 3 副本

副本分为:

  • Leader 副本(唯一)
  • Follower 副本(1 或多个)

Leader 处理:

  • offset 提交

Follower 只能拉取数据同步。

4. Kafka 集群数据同步机制(ISR)

ISR(In-Sync Replicas)

Kafka 保证数据可靠性的关键:

  • Leader 写入数据后
  • Follower 会异步拉取同步
  • 只有同步“足够快”的 Follower 才能进入 ISR

例如 replication=3:

p0 leader = broker1
p0 followers = broker2, broker3
ISR = {1,2,3}

若 broker3 同步太慢,会被踢出 ISR:

ISR = {1,2}

写入成功的条件(超重要)

acks=all + min.insync.replicas=2

至少 2 个副本写成功,消息才算成功写入,从而实现高可靠。

5. Leader 选举机制

Kafka 集群中:

  • 每个分区只有 1 个 Leader
  • Leader 负责收发数据
  • Follower 同步

如果某个 broker 挂掉:

  • Controller 选择新 Leader(从 ISR 中选)
  • Consumer / Producer 自动重定向请求

Leader 选举是 Kafka 保证高可用的核心能力。

6. Kafka Controller 节点(集群大脑)

整个集群中只有一个 Controller(由多个 Broker 选举产生),负责:

  • 分区 Leader 选举
  • Broker 上线/下线检测
  • ISR 变更管理
  • 分区重新分配
  • 处理节点故障

控制器故障时:

  • 另一个 Broker 会迅速成为新的 Controller
  • 不影响数据读写

7. Kafka 集群部署方式

7.1 单集群(最常见)

3–9 台 Broker:

broker1, broker2, broker3

副本会均匀分布。

7.2 跨机房(多数据中心)

常见策略:

1. Kafka MirrorMaker 2(业界最常用)

跨机房复制 Topic:

  • A -> B
  • B -> A

实现灾备或者异地多活。

2. Confluent Replicator

更稳定,但收费。

7.3 多集群(多租户)

按业务拆:

  • 订单集群
  • 日志集群
  • 实时计算集群

优点:

  • 不会互相影响
  • 更易扩容

8. Kafka 集群扩容 & 缩容

扩容(加 Broker)

流程:

  1. 增加 Broker 节点
  2. 运行 kafka-reassign-partitions.sh 迁移分区
  3. Confirm reassign 完成

Kafka 不会自动均衡,企业一般定期执行 rebalance 工具。

缩容(下线 Broker)

  1. 迁移该 Broker 的所有分区
  2. 将该 Broker 设为“停用”
  3. 安全下线

不能直接停,否则可能造成:

  • 分区不可用
  • ISR 变小
  • 性能下降

9. Kafka 集群监控指标

集群中必须监控:

1. Under Replicated Partitions(URP)

URP > 0 立即报警(副本不同步)

2. Offline Partitions

分区不可用,严重问题

3. Consumer Lag

消费堆积最重要指标

4. Network / IO

磁盘压力决定吞吐。

5. Page Cache 命中率

Kafka 依赖 OS page cache 提升读写。

10. Kafka 集群推荐配置(生产标准)

Producer

acks=all
enable.idempotence=true
retries=
batch.size=64KB
linger.ms=10ms
compression.type=zstd

Broker

num.partitions=3
default.replication.factor=3
min.insync.replicas=2

Consumer

enable.auto.commit=false
max.poll.interval.ms=300000
fetch.min.bytes=1MB

11. Kafka 集群架构图(强烈建议收藏)

文字版结构:

                +------------+
Producer -----> |  Broker 1  | <---- Consumer
                |  (Leader)  |
                +------------+
                     |   ↑
                     |   |
             Replication |
                     |   |
                +------------+
                |  Broker 2  | (Follower)
                +------------+
                     |
                +------------+
                |  Broker 3  | (Follower)
                +------------+

Zookeeper/KRaft 负责:

  • 集群元数据
  • Leader 选举
  • Broker 状态
  • ISR 维护