部署模式对比
Kafka 支持两种部署模式(单节点、集群),以及两种元数据管理方案(ZooKeeper、KRaft)。
概述
| 模式 | Broker 数 | 高可用 | 水平扩展 | 适用场景 |
|---|---|---|---|---|
| 单节点 | 1 | ❌ | ❌ | 本地开发、测试 |
| 集群(ZK) | ≥ 3 | ✅ | ✅ | 生产环境(历史遗留) |
| 集群(KRaft) | ≥ 3 | ✅ | ✅ | 生产环境(推荐,Kafka 3.7+) |
单节点(Standalone)
┌───────────────────┐
│ Broker :9092 │ KRaft 模式:Broker + Controller 合一
│ (broker,controller)│
└───────────────────┘优点:
- 部署最简单,一条 Docker 命令启动
- 资源占用少,适合本地开发和 CI
- 管理零成本
缺点:
- 无高可用,宕机即不可用
- 无数据冗余,副本因子只能为 1
- 吞吐受限于单机
适用:本地开发、单元测试、CI 流水线。
集群(KRaft 推荐)
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Broker 1 │ │ Broker 2 │ │ Broker 3 │
│ controller │ │ controller │ │ controller │ KRaft Quorum
│ :9092 │ │ :9093 │ │ :9094 │
└──────────────┘ └──────────────┘ └──────────────┘
▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
│ │ │ │ │ │ │ │ │
Partition-0 Partition-1 Partition-2 (replication-factor=3)优点:
- 高可用:Broker 故障自动切换 Leader,服务不中断
- 数据冗余:多副本存储,不丢数据
- 水平扩展:增加 Broker 线性提升吞吐
- 无外部依赖:KRaft 模式自包含,运维简单
缺点:
- 至少 3 节点,资源成本较高
- 需配置 Controller Quorum 和网络互通
- KRaft 模式 Controller 节点负载较高(管理所有元数据)
适用:所有生产环境,中大规模应用。
KRaft vs ZooKeeper
| 对比维度 | ZooKeeper 模式 | KRaft 模式 |
|---|---|---|
| 外部依赖 | ZooKeeper 集群(≥ 3 节点) | 无,Kafka 内置 Raft |
| 进程数 | Kafka + ZK 两套系统 | 仅 Kafka 一套 |
| 元数据存储 | ZK 树形结构 | Kafka 内部 Topic __cluster_metadata |
| 元数据传播 | ZK Watch(慢) | Raft 日志复制(快) |
| Controller 故障恢复 | 从 ZK 重建(耗时 10-60s) | Raft Leader 选举(< 1s) |
| Partition 数上限 | ~200K(ZK 节点数瓶颈) | ≥ 2M |
| Kafka 版本 | 所有版本 | 3.3+ 生产可用,4.0+ 仅支持 KRaft |
| 迁移支持 | — | ZK→KRaft 在线迁移(3.5+) |
选型决策
是否需要高可用?
├── 否 → 单节点(开发/测试)
└── 是
└── Kafka 版本?
├── ≤ 3.2 → 集群(ZooKeeper)
└── ≥ 3.3 → 集群(KRaft,推荐)| 条件 | 推荐模式 |
|---|---|
| 本地开发、测试 | 单节点 KRaft |
| 生产环境,Kafka ≥ 3.3 | KRaft 集群 |
| 生产环境,Kafka ≤ 3.2 | ZK 集群 + 计划迁移 |
| 大容量场景(> 200K Partition) | KRaft 集群 |