kafka和rabbitmq的broker的组成差异

Kafka Broker

  • Partition Leader + Follower Replicas— 数据以 partition 为单位复制
  • Controller— 集群里只有一个,负责选举 leader、管理副本
  • Log Segments— 消息落地到磁盘的存储结构
  • 无 Erlang— 纯 JVM (Java/Scala)
  • 协调依赖 ZooKeeper 或新版KRaft(Raft 协议)

RabbitMQ Broker

  • Erlang VM— 整个 broker 跑在 Erlang 虚拟机上
  • Virtual Host— 多租户隔离
  • Exchange + Queue + Binding— 路由三件套(direct/fanout/topic/headers)
  • Message Store— 内存 + 磁盘持久化
  • Connection / Channel— 连接复用通道

本质区别

KafkaRabbitMQ
模型Pub/Sub + Log (partition)Pub/Sub + 消息队列
存储Append-only log,消息按 offset 顺序读取消息消费即删除(除非持久化)
协议自定义 binary 协议AMQP 0-9-1, STOMP, MQTT, HTTP
语言JVMErlang
适用场景高吞吐日志流、事件源任务队列、灵活路由

简单说:Kafka broker 是"分布式日志系统",RabbitMQ broker 是"消息队列路由器",设计哲学就不同。