Skip to content

Apache Kafka 核心概念映射

本页结论:用 Kafka 的术语逐一回答统一知识模型的十二个维度;关键区分是 Partition 同时承担「顺序单位、并行单位、复制单位」三重角色,Offset 是消费进度而不是删除标记。

实体关系

  • Broker:Kafka 服务进程,承载若干分区的 Leader/Follower 副本。KRaft 模式下元数据(集群成员、分区 Leader、Topic 配置)以内部日志形式在 controller quorum 中复制,不依赖 ZooKeeper。
  • Topic:逻辑分类,必须预先存在时才能按名写入(本仓库关闭了 auto.create.topics.enable,由 setup 步骤显式建 Topic)。
  • Partition:Topic 的物理分片,一段只追加(append-only)的日志。它同时是:顺序保证的单位、消费并行度的单位、副本复制的单位。
  • Offset:分区内每条消息的单调递增编号。消费者记录「下一个要读的 offset」(committed offset),日志本身不因消费而删除。
  • Consumer Group:组内每个分区只分配给一个消费者(瓜分);不同组各自维护独立 offset(广播效果靠多组实现)。
  • Replica / ISR:每个分区有 1 个 Leader 与若干 Follower;与 Leader 保持同步的副本集合称 ISR,写入确认条件由 acksmin.insync.replicas 决定。

十二维度映射

1. 定位与适用场景

日志型消息系统:事件流、回放、管道、同键有序任务流。不适合按消息属性灵活路由(没有 Exchange/Binding 抽象)。

2. 核心实体

Producer、Topic、Partition、Consumer Group、Offset、Broker/Replica。消息本身是「record」:key + value + headers + timestamp。

3. 路由与分发

Kafka 的「路由」= key 到分区的映射,见专页 分区与分发。无 binding 概念;分发到多个下游靠多个消费组。

4. 存储与保留

日志追加写入段文件(segment),消费不删除记录。保留策略有两种且互不等价(规格 §7.2 强制点):

策略行为适用
Retention(时间/大小)超过阈值删除整段旧日志普通事件流:保留 7 天之类
Log Compaction只保留每个 key 的最新 value状态快照类(如 changelog、配置)

Retention 是「删除旧数据」,Compaction 是「压缩同 key 旧版本」,两者可组合;都不是「消费后删除」。

5. 生产可靠性

acks=all + enable.idempotence=true 是本仓库默认组合:确认以 ISR 全部写入为准,幂等生产避免 Broker 端重试产生重复序列。详见 可靠性

6. 消费可靠性

Kafka 没有 ACK/NACK 单条消息的概念:可靠性由 offset 提交时机 表达。手动提交(commitSync)在业务处理后执行;自动提交按时间间隔提交,存在丢失/重复窗口。崩溃后从已提交 offset 重读——「重投」的单位是位点之后的整段消息。

7. 投递语义

  • at-most-once:生产不等确认 + 消费先提交 offset 再处理。
  • at-least-once:acks=all + 处理完才提交 offset(标准姿势)。
  • exactly-once:仅限 Kafka 内部(事务型 produce-consume,见 可靠性);跨外部系统仍需幂等消费。

8. 顺序语义

分区内有序,跨分区无序——「Kafka 保证全局顺序」是规格 §7.2 的禁止表述。同 key 哈希进同一分区可获得局部顺序;消费端单线程处理分区消息即保序,多线程拆分处理会破坏顺序。详见 顺序语义顺序实验

9. 失败处理

无 Broker 内置消费重试与 DLQ。Retry Topic / DLQ 是应用层或框架层模式(如 Spring Kafka 的 RetryTopic/DLQ 注解),本质是「消费失败 → 转发到另一个 Topic」。

10. 高可用与扩展

分区多副本 + ISR;KRaft controller quorum 管理元数据。扩容 Broker 后需要分区再分配(reassignment)才能利用新节点。详见 存储与高可用

11. 安全与可观测性

认证(SASL/PLAIN、SCRAM、mTLS)、授权(ACL,按 Topic/Group/操作粒度)、TLS。指标经 JMX 导出(Prometheus 用 JMX Exporter)。核心指标:消费组 lag、ISR 收缩、under-replicated partitions。traceId 经 record headers 传播(本仓库 Demo 已贯穿 producer/consumer 日志)。

12. 限制与反模式

见专页 陷阱与检查表

三层语义示例:「消息不会丢」

层级Kafka 的成立条件
Broker 层acks=allmin.insync.replicas≥2(多副本)时确认表示 ISR 全部落盘;本仓库单节点 RF=1,确认仅表示 Leader 已写入
Client 层Producer 处理发送异常并重试(幂等生产避免重试重复);Consumer 处理完成才 commitSync
Business 层业务写入与幂等记录同事务;提交 offset 不等于业务数据库已提交——两者之间存在崩溃窗口(禁止表述之二,见 可靠性

官方资料

以统一实验验证消息系统语义边界