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 跟随已提交记录更新本地元数据映像。