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。

官方出处与源码

回到首页 · 下一篇