全书目录

第二十篇:Kafka 完全指南 —— 城市事件广播总线宇宙

第三章:topic / partition / offset —— Kafka 最核心的骨架

2 分钟 453 字 第 370 / 962 个阅读单元

Kafka 的主题不是一个“盒子”,而是一组分区日志

text
Topic: order-events

Partition 0: [0] [1] [2] [3] [4]
Partition 1: [0] [1] [2]
Partition 2: [0] [1] [2] [3]

这里最关键的认知有 3 个。

#1. offset 只在“分区内”有意义

很多人第一次学 Kafka,会以为 offset 是整个 topic 的全局编号。不是。

正确理解是:

  • Partition 0 有自己的 offset 0,1,2...
  • Partition 1 也有自己的 offset 0,1,2...
  • 不存在“整个 topic 的全局统一 offset”

也就是说:

text
order-events / partition-0 / offset-7
order-events / partition-2 / offset-7

这是两条完全不同的记录。

#2. partition 是扩容单位,不只是存储单位

为什么要分区?

因为单条轨道吞吐有限,Kafka 用多条分区并行处理:

  • 写入可以并行
  • 消费可以并行
  • 存储可以分布到不同 broker

所以分区本质上是在解决:

如何把一个超大的事件流拆成多条并行干线。

#3. 顺序只在分区内成立

Kafka 能稳定保证的是:

  • 同一个 partition 内,记录按写入顺序追加
  • 不同 partition 之间,没有天然全局顺序

这个结论重要到值得单独写一遍:

text
分区内有序
≠
整个 topic 全局有序