一个最小可用的 Broker 需要回答四个问题:消息怎么进来、存哪、怎么投递、失败怎么办。

  • 接入层:TCP/HTTP 协议解析,接收生产者消息,返回确认;校验与限流。
  • 存储层:核心是每个主题(或队列)一个追加写的日志文件——顺序写磁盘性能极好,天然支持回放;消息带 offset。要决定保留策略(按时间/大小截断)与 fsync 策略(持久性与吞吐的权衡)。
  • 投递语义:消费者按 offset 拉取(pull 模型简单且易控速),Broker 记录每个消费组的消费位点;位点提交前消息重投 → 至少一次投递,配合消费者幂等;位点先提交则至多一次。精确一次需要事务与幂等生产者的组合。
  • 可靠性:Broker 自身用副本(主从复制、ISR 式同步)防单机丢数据;消费失败重试,超限进死信队列。
  • 进阶能力:分区实现水平扩展与并行消费、顺序保证限定在分区内、积压监控。

Kafka 就是“分布式提交日志”这一极简模型的成功范例。易错点:ack 时机的三个组合(收到即 ack/落盘后 ack/消费后 ack)决定丢失与重复的平衡;磁盘的顺序写并不慢,随机写才是瓶颈。