00 首页

Kafka 架构图解

Kafka 以分区追加日志保存业务记录:生产者找到分区 leader 写入,消费者主动拉取。KRaft controller 仲裁管理集群元数据;消费组协调与业务分区复制各有独立职责。
版本:Apache Kafka 4.4.0(KRaft);核实日期:2026-11-12。官方在线文档可能继续更新,源码链接固定到对应发布标签。图为原理抽象,省略非本页重点。

从边界到模块

specification { element actor { style { shape person; color amber } } element system { style { color muted } } element component { style { color primary } } element storage { style { shape storage; color green } } } model { producer = actor '生产者' consumer = actor '消费者' app = system 'Kafka 集群(逻辑角色)' { broker = component 'Broker / 分区 leader' log = storage '业务分区日志' follower = component '分区 follower' group = component 'Group coordinator' offset = storage '__consumer_offsets' controller = component 'KRaft controller quorum' } producer -> app.broker 'Produce' consumer -> app.broker 'Fetch' app.broker -> app.log '追加与读取' app.follower -> app.broker '拉取分区副本' consumer -> app.group '成员协调与 offset 提交' app.group -> app.offset '保存组状态与提交位置' app.controller -> app.broker '提供已提交元数据' } views { view index { title '01 · 系统边界' include producer, consumer, app autoLayout LeftRight } view modules of app { title '02 · 模块与数据流' include app.*, producer, consumer autoLayout LeftRight } }

阅读方法

先看“系统边界”,再切换“模块与数据流”或从系统节点进入下钻视图。箭头表示交互或数据流,不代表全部为同步调用;每条核心链路页提供独立可读的时序图。可在图中缩放、平移和切换视图。

四条核心链路

  • 生产者写入:生产者把记录按分区聚合成批,经 Sender 发给 leader;ack 条件取决于配置,不等于每条消息都执行磁盘 fsync。
  • 消费组与 offset:消费位置由消费者拉取推进,已提交位置由组协调器保存;先处理再提交可减少漏处理,却仍可能在崩溃后重复。
  • 副本与 ISR:leader 接受写入,follower 主动拉取;ISR 是正在跟上 leader 的副本集合,high watermark 限制普通消费者可见的已复制范围。
  • KRaft 元数据:KRaft 通过 controller quorum 复制集群元数据;一个 active controller 处理变更,broker 跟随已提交记录更新本地元数据映像。

官方资料