2. Kafka 基础回顾:Topic、Partition、Producer、Consumer、Broker 核心概念
在深入契约校验之前,必须统一对 Kafka 核心数据模型与角色的认知。Kafka 是一个分布式、分区化、多副本的发布-订阅消息系统。本章将围绕五个核心概念展开:Topic(主题)、Partition(分区)、Producer(生产者)、Consumer(消费者)、Broker(代理节点)。理解这些概念之间的协作关系,是后续定义和验证消息契约的基础。
2.1 核心概念总览
下表从定义、职责、关键属性三个维度对比五个核心概念,帮助建立全局视角。
| 概念 | 定义 | 核心职责 | 关键属性 |
|---|---|---|---|
| Topic | 消息的逻辑分类/主题名称 | 组织消息流,作为生产者与消费者之间的逻辑通道 | 名称、分区数、副本因子、保留策略 |
| Partition | Topic 内部的物理分片单元 | 提供并行处理能力,保证消息有序性(分区内) | 分区编号、Leader/Follower、偏移量范围 |
| Producer | 消息的发布者/写入端 | 将消息发送到指定 Topic 的指定分区 | acks 确认、重试机制、分区策略、序列化器 |
| Consumer | 消息的订阅者/读取端 | 从分区拉取消息,维护消费偏移量 | 消费组、偏移量提交方式、反序列化器 |
| Broker | Kafka 集群中的单个服务器节点 | 存储分区数据、处理读写请求、管理元数据 | 节点 ID、存储路径、端口、副本同步状态 |
2.2 消息流转架构图
下图展示了从 Producer 生产消息到 Consumer 消费消息的完整路径,以及 Broker 集群、Topic 与 Partition 的物理分布关系。
2.3 深入理解五大核心概念
2.3.1 Topic(主题)
Topic 是 Kafka 中消息的逻辑分类单元。一个 Topic 对应一个业务消息流,例如 order_created、payment_success。Topic 具有以下关键属性:
- 名称:全局唯一,通常采用小写字母加下划线的命名规范。
- 分区数(Partitions):决定 Topic 的并行处理能力,分区数越多,吞吐量上限越高。
- 副本因子(Replication Factor):每个分区的副本数量,影响数据可靠性。
- 保留策略(Retention Policy):基于时间或大小的消息过期清理规则。
2.3.2 Partition(分区)
Partition 是 Topic 内部的物理分片,每个 Partition 是一个有序的、不可变的消息日志。分区是 Kafka 并行性和有序性的基础:
- 有序性:消息在分区内按写入顺序存储,通过偏移量(Offset)唯一标识。
- 并行性:不同分区可被不同 Consumer 实例并行消费。
- 副本机制:每个分区有 1 个 Leader 副本和多个 Follower 副本,Leader 负责读写,Follower 负责同步。
// 分区消息结构示意(逻辑视图)
Partition: order_created-0
Offset 0: { "orderId": "1001", "userId": "u001", "amount": 99.9 }
Offset 1: { "orderId": "1002", "userId": "u002", "amount": 199.0 }
Offset 2: { "orderId": "1003", "userId": "u001", "amount": 59.9 }
...
2.3.3 Producer(生产者)
Producer 负责将消息发布到指定的 Topic。在契约校验场景中,Producer 的行为直接决定了消息的格式与质量:
- 分区策略:决定消息写入哪个分区(轮询、哈希、自定义)。
- acks 确认:0(不等待确认)、1(等待 Leader 确认)、all(等待所有副本确认)。
- 重试机制:发送失败时的重试次数与间隔。
- 序列化器:将 Java 对象转换为字节数组,常见的有 JSON、Avro、Protobuf。
2.3.4 Consumer(消费者)
Consumer 从 Topic 的分区中拉取消息,并维护消费进度(偏移量)。Consumer 的核心机制包括:
- 消费组(Consumer Group):组内 Consumer 共同消费一个 Topic,每个分区只能被组内的一个 Consumer 实例消费。
- 偏移量提交:自动提交(默认每 5 秒)或手动提交,影响消息的消费语义(至少一次、最多一次、精确一次)。
- 再均衡(Rebalance):当 Consumer 加入或离开消费组时,分区所有权重新分配。
2.3.5 Broker(代理节点)
Broker 是 Kafka 集群中的单个服务器节点,负责存储数据、处理客户端请求、管理集群元数据。关键特性:
- 节点 ID:集群内唯一标识。
- Controller 角色:集群中有一个 Broker 充当 Controller,负责分区 Leader 的选举和元数据管理。
- 存储路径:分区数据以日志段(Log Segment)形式存储在磁盘上。
- 副本同步:Follower 副本从 Leader 副本拉取数据,保持同步状态(ISR 列表)。
2.4 核心概念对比:Topic vs Partition
Topic 和 Partition 是 Kafka 中最容易混淆的两个概念,下表从多个维度进行对比:
| 对比维度 | Topic | Partition |
|---|---|---|
| 粒度 | 逻辑概念,业务消息分类 | 物理概念,数据存储分片 |
| 有序性 | 全局无序 | 分区内严格有序 |
| 并行单位 | 不可直接并行 | Consumer 并行消费的基本单位 |
| 副本范围 | 无副本概念 | 每个 Partition 独立配置副本 |
| 契约校验关注点 | 名称、分区数、保留策略 | 分区键、偏移量范围、副本状态 |
2.5 分区分配与消费关系图
下图展示了一个 Topic 包含 4 个分区,被一个包含 3 个 Consumer 实例的消费组消费时的分区分配关系。这是理解 Consumer 并行消费和再均衡行为的关键。
2.6 本章小结
- Topic 是消息的逻辑分类,Partition 是物理存储分片,两者共同定义了消息的组织结构。
- Producer 负责写入消息,Consumer 负责读取消息,Broker 负责存储与协调。
- 分区是 Kafka 并行性和有序性的核心单元,消费组内的 Consumer 实例通过分区分配实现负载均衡。
- 契约校验需要覆盖 Topic 元数据、消息序列化格式、分区分配策略、偏移量提交行为等关键环节。