2. Kafka 核心概念回顾:Topic、Partition、Offset、Consumer Group、Rebalance 机制

在深入 Kafka 堆积诊断之前,必须牢固掌握 Kafka 的五大核心抽象。这些概念构成了消息存储、分发与消费的基石,也是后续链路追踪埋点与堆积根因分析的关键上下文。

2.1 Topic 与 Partition:逻辑与物理的分离

Topic(主题) 是消息的逻辑分类,生产者将消息发送到特定 Topic,消费者从 Topic 拉取消息。Partition(分区) 是 Topic 的物理分片,每个 Partition 是一个有序、不可变的日志文件(Commit Log)。

核心原则:Partition 是 Kafka 并行度的基本单位。一个 Topic 的分区数决定了同一 Consumer Group 内最大并行消费的线程数。
Topic 与 Partition 结构 Topic: orders Partition 0 offset: 0 → 1 → 2 → 3 Leader: Broker-1 Follower: Broker-2 Partition 1 offset: 0 → 1 → 2 Leader: Broker-2 Follower: Broker-3 Partition 2 offset: 0 → 1 → 2 → 3 → 4 Leader: Broker-1 Follower: Broker-3 每个 Partition 内部严格有序,但 Partition 之间不保证全局顺序

2.2 Offset:消息的唯一坐标

Offset(偏移量) 是 Partition 内每条消息的唯一递增序号,标识消息在日志中的绝对位置。消费者通过提交 Offset 来记录消费进度。

概念 说明 诊断堆积时的作用
Log End Offset (LEO) Partition 日志中最新消息的 Offset + 1 表示当前 Partition 的最新写入位置
Current Offset 消费者当前已消费到的 Offset 表示消费者的处理进度
Committed Offset 消费者提交到 Kafka 或外部存储的 Offset 用于故障恢复时的消费起点
Lag LEO - Current Offset 堆积量核心指标,Lag > 0 表示有堆积
诊断要点:在 OpenTelemetry 链路中,我们会在消费端埋点记录 current_offset 和 partition_leo,通过计算两者的差值实时获取 Lag 指标。

2.3 Consumer Group:消费的协作单元

Consumer Group(消费组) 是 Kafka 实现点对点与发布订阅两种模式的核心机制。组内的每个消费者负责消费一个或多个 Partition,组间互不影响。

  • 点对点模式:同一 Group 内的消费者共同消费 Topic 的全部消息,每条消息只被组内一个消费者处理。
  • 发布订阅模式:不同 Group 各自独立消费 Topic 的全部消息,每条消息可被多个 Group 消费。
  • 分区分配策略:Range(范围分配)、RoundRobin(轮询分配)、Sticky(粘性分配)、CooperativeSticky(协作粘性分配)。
Consumer Group 与 Partition 分配 Topic: orders (3 Partitions) Partition 0 Partition 1 Partition 2 Consumer Group: order-service-group Consumer-1 Consumer-2 Consumer-3 每个 Partition 只能被 Group 内的一个消费者消费,实现负载均衡

2.4 Rebalance 机制:消费组的动态调整

Rebalance(再均衡) 是 Consumer Group 在成员变动或 Topic 分区数变化时,重新分配 Partition 与消费者对应关系的过程。Rebalance 期间,整个 Group 会短暂停止消费,是导致消费抖动和堆积的常见原因。

触发 Rebalance 的场景

  1. 消费者加入或离开:新消费者启动、消费者崩溃、消费者主动关闭。
  2. Topic 分区数变更:管理员增加或减少 Topic 的分区数。
  3. 订阅关系变更:消费者动态修改订阅的 Topic 列表。
  4. 心跳超时:消费者未在 session.timeout.ms 内发送心跳,被 Coordinator 判定为死亡。

Rebalance 的两种模式

模式 特点 对消费的影响 适用场景
Eager Rebalance 所有消费者停止消费,撤销全部分区,重新分配 Stop-the-world,影响较大 旧版本 Kafka(0.11 之前)
Cooperative Rebalance 消费者只撤销被重新分配的分区,未受影响的分区继续消费 影响范围小,更平滑 Kafka 2.4+,推荐使用
堆积诊断警示:频繁的 Rebalance 会导致消费停滞,Lag 瞬时飙升。在 OpenTelemetry 链路中,我们会在消费者端记录 rebalance_count 和 rebalance_duration_ms 指标,用于关联分析堆积是否由 Rebalance 引发。

2.5 核心概念关系总结

下表梳理了五大核心概念在消息流转中的角色与关系:

概念 角色 与堆积诊断的关系
Topic 消息的逻辑分类 堆积按 Topic 维度聚合统计
Partition 消息的物理分片与并行单元 堆积粒度精确到 Partition,定位热点分区
Offset 消息在 Partition 内的唯一坐标 通过 Offset 差值计算 Lag,量化堆积深度
Consumer Group 消费者的协作单元 堆积按 Group 隔离,不同 Group 堆积互不影响
Rebalance 消费关系的动态调整机制 Rebalance 期间消费暂停,是堆积的常见诱因
课程关联:在后续章节中,我们将基于这些核心概念设计 OpenTelemetry 的 Span 属性与 Metrics 指标。例如:messaging.kafka.partition、messaging.kafka.offset、messaging.consumer.group 等属性将直接映射到链路追踪的 Span 中,帮助快速定位堆积的 Partition 与 Consumer Group。