2. Kafka 核心概念:Topic、Partition、Producer、Consumer、Broker、Zookeeper 角色
Kafka 的架构由一组职责清晰的核心角色构成。理解这些角色及其协作关系,是开发可靠消息任务与设计复测集成方案的基础。本节将逐一解析六大核心概念,并通过架构图与对比表格帮助建立整体认知。
2.1 核心角色总览
Kafka 集群采用分布式架构,所有角色围绕“消息的发布与订阅”这一核心目标展开协作。下表概括了每个角色的基本职责:
| 角色 | 核心职责 | 关键特征 |
|---|---|---|
| Broker | 消息存储与转发服务器 | 集群由多个 Broker 组成;每个 Broker 拥有唯一 ID |
| Topic | 消息的逻辑分类/主题 | 生产者将消息发往 Topic;消费者从 Topic 拉取消息 |
| Partition | Topic 的物理分片单元 | 每个 Partition 是有序、不可变的消息日志;支持并行读写 |
| Producer | 消息发布者 | 将消息写入指定 Topic 的 Partition;可指定分区策略 |
| Consumer | 消息订阅者 | 从 Partition 拉取消息;通过 Consumer Group 实现负载均衡 |
| Zookeeper | 集群协调服务 | 管理 Broker 元数据、Controller 选举、Consumer 位移 |
2.2 架构协作关系
下图展示了 Kafka 集群中六个核心角色的协作流程:Producer 将消息写入 Broker 上的 Topic Partition,Consumer 从 Partition 拉取消息,Zookeeper 负责维护集群元数据与协调状态。
2.3 角色深度解析
2.3.1 Broker
Broker 是 Kafka 集群中的单个服务器实例,负责接收 Producer 的消息、存储消息到磁盘、响应 Consumer 的拉取请求。每个 Broker 在启动时向 Zookeeper 注册自身信息(IP、端口、存储容量等)。集群中通常包含 3 台或更多 Broker 以实现高可用。
2.3.2 Topic 与 Partition
Topic 是消息的逻辑分类,类似于数据库中的表。每个 Topic 可被划分为多个 Partition,Partition 是物理存储的最小单位。Partition 内部的消息是有序的,通过偏移量(Offset)唯一标识。Partition 的并行度决定了消息吞吐量的上限。
- Partition 数量在 Topic 创建时指定,后续可扩容但不可缩容。
- 每个 Partition 在集群中有多个副本(Replica),副本数通常设置为 2 或 3。
- 同一 Partition 的多个副本分布在不同的 Broker 上,Leader 副本负责读写,Follower 副本负责同步。
2.3.3 Producer
Producer 负责将消息发布到指定的 Topic。在发送消息时,Producer 需要决定将消息写入哪个 Partition。常见的分区策略包括:
- 轮询策略: 消息均匀分布到所有 Partition。
- Key 哈希策略: 根据消息 Key 的哈希值选择 Partition,保证相同 Key 的消息进入同一 Partition。
- 自定义分区器: 实现
Partitioner接口,按业务规则分配。
2.3.4 Consumer 与 Consumer Group
Consumer 从 Partition 拉取消息进行消费。多个 Consumer 可以组成一个 Consumer Group,实现负载均衡与容错。Group 内每个 Partition 只能被一个 Consumer 消费,但一个 Consumer 可以消费多个 Partition。
| 场景 | Consumer 数量 | Partition 分配方式 |
|---|---|---|
| 单 Consumer 消费 | 1 | 消费所有 Partition |
| Group 内 Consumer 数 = Partition 数 | N | 每个 Consumer 消费 1 个 Partition |
| Group 内 Consumer 数 > Partition 数 | M (M > N) | 部分 Consumer 空闲 |
| Group 内 Consumer 数 < Partition 数 | K (K < N) | 部分 Consumer 消费多个 Partition |
2.3.5 Zookeeper 的协调角色
Zookeeper 在 Kafka 集群中承担以下关键职责:
- Broker 注册与发现: 维护所有存活 Broker 的节点列表。
- Controller 选举: 从 Broker 中选举一个 Controller,负责 Partition 的 Leader 选举与副本管理。
- Topic 元数据管理: 存储 Topic 的 Partition 分配信息与副本分布。
- Consumer 位移存储(旧版): 在 Kafka 0.9 之前,Consumer 的消费位移存储在 Zookeeper 中;新版已迁移到 Kafka 内部 Topic
__consumer_offsets。
2.4 消息流转全流程
下图展示了从 Producer 发送消息到 Consumer 消费消息的完整数据流,包含 Partition 副本同步与 Consumer Group 重平衡的关键步骤:
2.5 角色对比与选型建议
| 对比维度 | Producer | Consumer | Broker |
|---|---|---|---|
| 数据流向 | 写入 | 读取 | 存储与转发 |
| 状态管理 | 无状态 | 维护消费位移 | 维护 Partition 元数据 |
| 扩展方式 | 增加 Producer 实例 | 增加 Consumer 实例(Group 内) | 增加 Broker 节点 |
| 容错机制 | 重试 + 幂等性 | 位移提交 + 重平衡 | 副本同步 + Controller 选举 |
| 性能瓶颈 | 网络带宽、序列化 | 消费处理逻辑 | 磁盘 I/O、网络吞吐 |