Skip to content
消息系统选型与 Kafka 基础 · 第 3 篇 / 共 5 篇
领域数据与中间件
专题Kafka 专题
当前序列消息系统选型与 Kafka 基础
阅读位置第 3 篇 / 共 5 篇当前专题第 1 个序列 / 共 6 个序列

Kafka 核心架构与消息投递:Topic、Partition、Replica、Producer、Broker、Consumer 怎么协同

Kafka 很容易被简单记成“高吞吐 MQ”,但如果只停留在这个标签,后面理解:

  • 分区
  • 副本
  • 消费组
  • 重平衡

都会比较吃力。

先说结论

Kafka 的核心理解可以先抓这几层:

  • Topic:逻辑主题
  • Partition:并行与顺序的基本单位
  • Replica:高可用副本
  • Producer:写入端
  • Broker:存储和转发节点
  • Consumer Group:消费并行与负载分摊单位

真正让 Kafka 强的,不是“像队列”,而是它把日志存储、分区并行和副本复制结合在了一起。

一、Topic 和 Partition 怎么理解

Topic

Topic 更像一个逻辑分类。

例如:

  • 订单事件
  • 用户行为日志
  • 埋点流

Partition

真正决定并行度和顺序性的,是 Partition

可以先记住一句非常重要的话:

  • Kafka 的顺序通常只在分区内成立

也就是说:

  • 同一个分区里的消息可以按 offset 顺序消费
  • 跨分区不应默认认为存在全局顺序

二、副本为什么重要

Kafka 的高可用依赖副本机制。

一个分区可以有多个副本,其中通常会有:

  • Leader
  • Follower

常见理解:

  • 生产和消费主要对 Leader 进行
  • Follower 负责从 Leader 同步数据

这样某个节点挂掉时,系统还能通过副本切换维持可用性。

三、Producer 写入流程最该理解什么

生产者发消息时,最关键的几个问题是:

  • 发到哪个 Topic
  • 进哪个 Partition
  • 是否需要确认机制
  • 是否要求幂等或事务语义

分区选择会影响什么

  • 并行度
  • 局部顺序
  • 数据热点

如果某类 key 总打到同一分区,虽然顺序更稳,但也可能造成热点分区。

四、Kafka 为什么吞吐高

最核心的原因通常不是单一点,而是一整套组合:

  • 顺序追加写
  • 批量发送
  • 零拷贝能力
  • 分区并行
  • 适合日志流式模型

所以 Kafka 很适合:

  • 事件流
  • 日志流
  • 数据采集通道

但它并不以复杂业务路由见长。

五、Consumer 怎么读取消息

消费者读取时,最重要的是:

  • 一个分区在同一消费组内通常只会分配给一个消费者实例

这直接决定了:

  • 并行消费能力和分区数强相关

如果消费组只有 2 个消费者,但 Topic 有 10 个分区,那么它们会分摊多个分区。

如果消费者比分区多,多出来的消费者不会真正工作。

六、消息投递语义怎么理解

Kafka 里常见的几个关键词:

  • 至少一次
  • 至多一次
  • 精确一次

实际工程里,最常见更现实的目标通常还是:

  • 允许重复,但消费端做幂等

因为真正追求跨链路精确一次,复杂度会明显提升。

七、Offset 为什么这么关键

消费者是否处理过某条消息,本质上通常是通过 offset 来标记进度。

所以 offset 提交策略会直接影响:

  • 重复消费
  • 消息丢失风险

例如:

  • 太早提交,可能业务没处理完就把进度推进了
  • 太晚提交,故障后会重复消费更多消息

八、Kafka 更适合什么场景

更适合:

  • 埋点与日志采集
  • 事件流驱动
  • 大数据管道
  • 高吞吐异步链路

不一定最合适:

  • 需要极灵活路由规则的传统业务消息
  • 很强调复杂死信、延迟和细粒度路由模型的场景

一句话总结

Kafka 的核心不是“它也是个 MQ”,而是它用分区日志模型把高吞吐、顺序性边界和高可用副本组织在了一起。

理解了 Partition + Replica + Consumer Group + Offset 这四个核心点,Kafka 的大部分行为就会清晰很多。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读Kafka 消费组与 Rebalance适合先理解为什么要用 MQ,再衔接 Kafka 的核心架构、消费组和生产端基础。Kafka 专题 · 消息系统选型与 Kafka 基础同一序列 · 顺着当前主线继续读Kafka Producer 参数调优适合先理解为什么要用 MQ,再衔接 Kafka 的核心架构、消费组和生产端基础。Kafka 专题 · 消息系统选型与 Kafka 基础同专题其他序列 · Kafka 投递链路与日志存储机制保留策略和日志压缩适合哪些场景适合把副本机制、acks、批量压缩和日志组织放在一条 Kafka 投递主线上理解。Kafka 专题 · Kafka 投递链路与日志存储机制同专题其他序列 · Kafka 高级投递与消费治理批量发送、压缩和吞吐延迟怎么权衡适合把分区键、批量压缩、位点提交和 ISR 治理放在一起看。Kafka 专题 · Kafka 高级投递与消费治理跨专题关联 · 同场景:基础学习@Conditional 系列注解怎么配合使用适合把自动装配、条件装配、Profile 和循环依赖放回 Spring Boot 启动过程里理解。Spring 专题 · Spring Boot 启动、装配与配置跨专题关联 · 同场景:基础学习迟到数据、侧输出流和补数边界适合把 Savepoint、迟到数据和两阶段提交放在一起看。Flink 专题 · Flink 状态一致性与迟到数据处理
继续阅读消息系统选型与 Kafka 基础当前序列第 3 篇 / 共 5 篇当前专题第 1 个序列 / 共 6 个序列
往前看
上一篇RabbitMQ、Kafka、RocketMQ 怎么选回到当前序列上一章上一序列协同控制与分布式锁从第 1 篇开始:Redis 和 ZooKeeper 分布式锁怎么选
往后看
下一篇Kafka 消费组与 Rebalance继续当前序列下一章下一序列Kafka 可靠性与故障治理从第 1 篇开始:Kafka 顺序性、幂等生产者和精确一次

把零散经验整理成可查、可复用、可持续更新的企业级知识门户