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 --- 连接复用通道

本质区别

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

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