地牢速攻无限金牙
31.22 MB · 2026-02-13
文章内容收录到个人网站,方便阅读:hardyfish.top/
Kafka 的写入路径是先写 Leader,再由 Leader 复制到 Followers。
写入链路:Leader 串行落盘,Followers 异步拉取复制
一次写入在分区(partition)维度上发生:
因此,从时序看是:生产者 → Leader 写入 → Followers 拉取复制。
Followers 的写入相对 Leader 是滞后的,滞后程度由网络、磁盘、负载与副本数共同决定。
acks 决定写到哪一步才算成功
生产者感知到的写成功由 acks 决定:
acks=0:生产者不等任何确认。
acks=1:Leader 写入本地日志后返回确认。
acks=all(或 acks=-1):
这里的关键点是:即便 acks=all,也是 Leader 等 Followers 复制完成后再回 ACK,而不是生产者并行写多份。
提交可读与已写入不是同一件事
Kafka 有两个容易混淆的状态:
当 acks=1 时,写入成功返回可能早于 committed。
当 acks=all 时,返回更接近 committed(在 ISR 机制正常工作前提下)。
常见误区:以为同时写能降低复制延迟
直觉上生产者同时写多个副本似乎更快,但 Kafka 的一致性与顺序保证依赖 Leader 统一仲裁与定序:
因此,Kafka 选择Leader 写入 + Followers 拉取是为了在吞吐、顺序、一致性与故障恢复之间取平衡,而不是追求生产者侧的并行多写。
31.22 MB · 2026-02-13
36.6G · 2026-02-13
108.01M · 2026-02-13