2. Kafka 核心概念:Topic、Partition、Offset、Broker、Producer、Consumer、Consumer Group

Kafka 的架构围绕七个核心概念构建,理解它们是掌握消息契约与开发验证的基础。这些概念共同定义了消息的存储、路由、消费与容错机制。

2.1 核心概念一览

概念 角色 关键特征
Broker Kafka 服务器节点 存储消息、处理请求;集群由多个 Broker 组成
Topic 消息的逻辑分类 生产者将消息发往 Topic;消费者从 Topic 拉取
Partition Topic 的物理分片 实现并行读写与水平扩展;每个 Partition 有序
Offset 消息在 Partition 内的位置 单调递增的整数;唯一标识一条消息
Producer 消息生产者 将消息写入指定 Topic 的 Partition
Consumer 消息消费者 从 Partition 拉取消息,提交 Offset
Consumer Group 消费者逻辑分组 组内消费者共同消费 Topic;实现负载均衡与容错

2.2 核心架构关系

下图展示了 Producer、Broker、Consumer 与 Consumer Group 之间的数据流与 Partition 映射关系。

Kafka 核心架构关系图 Producer Broker 集群 Broker 1 Broker 2 Topic: order-events Partition 0 Partition 1 Partition 2 Consumer Group: order-group Consumer A Consumer B Consumer C Consumer D Partition 与 Consumer 映射 一个 Partition 只能被同一组内 的一个 Consumer 消费

2.3 核心概念详解

2.3.1 Broker

Broker 是 Kafka 集群中的单个服务器实例。每个 Broker 拥有唯一 ID,负责接收 Producer 的写入请求、存储消息副本、处理 Consumer 的拉取请求。集群通过 ZooKeeper 或 KRaft 进行协调。

2.3.2 Topic 与 Partition

  • Topic:消息的逻辑分类,类似数据库中的表。Producer 将消息发送到指定 Topic。
  • Partition:Topic 的物理分片。每个 Partition 是一个有序、不可变的消息序列。Partition 数量决定了 Topic 的最大并行度。
  • 消息路由:Producer 通过 Key 或轮询策略决定消息写入哪个 Partition。

开发验证要点:在复测流程中,需验证 Partition 数量是否与预期一致,以及消息是否均匀分布到各 Partition。

2.3.3 Offset

Offset 是消息在 Partition 内的唯一位置标识,从 0 开始单调递增。Consumer 通过提交 Offset 记录消费进度。Offset 管理是消息契约验证的核心——确保消息不丢失、不重复。

// 示例:查看 Partition 0 的当前最新 Offset
// 使用 kafka-consumer-groups 工具
kafka-consumer-groups --bootstrap-server localhost:9092 \
  --group order-group --describe

// 输出示例
GROUP           TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG
order-group     order-events    0          150             200             50
order-group     order-events    1          180             180             0
order-group     order-events    2          90              120             30

2.3.4 Producer

Producer 将消息发布到指定 Topic 的 Partition。关键参数包括:

  • acks:确认级别(0、1、all),影响数据可靠性。
  • retries:重试次数,影响消息投递的最终一致性。
  • batch.size:批量发送大小,影响吞吐量。

2.3.5 Consumer 与 Consumer Group

Consumer 从 Partition 拉取消息。多个 Consumer 可以组成一个 Consumer Group,共同消费一个 Topic。组内每个 Partition 只能被一个 Consumer 消费,实现负载均衡。

契约验证提示:在复测中,需验证 Consumer Group 的 Rebalance 行为是否正常,以及 Offset 提交策略(自动提交 vs 手动提交)是否符合业务要求。

2.4 Partition 与 Consumer 映射关系

下图展示了 Topic 的 3 个 Partition 如何分配给 Consumer Group 内的 2 个 Consumer,以及 Offset 的维护位置。

Partition 与 Consumer 映射及 Offset 维护 Partition 0 Partition 1 Partition 2 Offset: 0~199 Offset: 0~149 Offset: 0~299 Consumer Group: order-group Consumer A 消费 Partition 0, 1 Consumer B 消费 Partition 2 Offset 提交与消费进度 Consumer A 已提交 Partition 0 的 Offset 150,Partition 1 的 Offset 100 Consumer B 已提交 Partition 2 的 Offset 200

2.5 关键概念对比

对比维度 Topic Partition Offset
粒度 逻辑分类 物理分片 消息位置
有序性 不保证 分区内有序 单调递增
扩展性 可创建多个 可增加数量 自动管理
消费方式 订阅 分配 提交

常见陷阱:在复测中,如果 Consumer Group 内的 Consumer 数量超过 Partition 数量,多余的 Consumer 将处于空闲状态,不会分配到任何 Partition。这会导致资源浪费和消费延迟误判。

2.6 开发验证中的实践要点

  • Partition 数量规划:根据预期吞吐量和 Consumer 数量确定,避免频繁调整。
  • Offset 监控:使用 kafka-consumer-groups 工具或 JMX 指标监控 LAG(积压量)。
  • 消息契约验证:确保 Producer 发送的消息 Key 与 Partition 路由策略一致,Consumer 提交 Offset 的时机正确。
  • Rebalance 测试:模拟 Consumer 加入或退出,验证消费组重新分配 Partition 的行为。