01 生产者写入
生产者写入
生产者把记录按分区聚合成批,经 Sender 发给 leader;ack 条件取决于配置,不等于每条消息都执行磁盘 fsync。
版本: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 {
p = actor '应用线程'
acc = component 'RecordAccumulator'
sender = component 'Sender'
l = system '分区 leader'
f = system 'ISR follower'
}
views {
dynamic view index {
title '核心链路'
variant sequence
p -> acc '序列化并选择分区后入批次'
sender -> acc '取可发送批次'
sender -> l 'ProduceRequest'
l -> l '追加到本地分区日志'
f -> l 'Fetch 拉取新增记录'
l -> f '返回复制记录'
l -> sender '满足 acks 条件后返回结果'
sender -> p '完成 future / callback'
}
}
关键判断
- bootstrap.servers 用于发现集群;实际发送按元数据找到各分区 leader,leader 变化后刷新并重试。
- acks=all 等待当前 ISR 的复制条件,min.insync.replicas 限制可接受写入的最少同步副本数;不足时请求失败。
- 重试时的重复与顺序还受幂等生产者、序列号及 in-flight 配置影响;不能只靠 acks 推导端到端恰好一次。
边界
图采用启用副本且 acks=all 的成功路径,省略超时和重试;broker 通常利用页缓存,复制确认不等于所有副本已 fsync。