很多争论一开始就错了,因为拿两种不同城市设施硬比。
RabbitMQ 和 Kafka 都能传消息,但它们默认回答的问题不一样。
| 维度 | RabbitMQ | Kafka |
|---|---|---|
| 核心心智 | 智能任务调度中心 | 可回放事件日志干线 |
| 默认关注点 | 把消息路由给谁处理 | 把事件按顺序写入并长期保留 |
| 消费语义直觉 | 处理完成后确认,消息可从队列移除 | 事件保留在日志中,消费者自己推进 offset |
| 路由能力 | 强,exchange/binding 很灵活 | 相对简单,主要按 topic/partition |
| 典型用途 | 异步任务、命令分发、工作队列、RPC、复杂路由 | 事件流、数据管道、审计、重放、流处理 |
| 多消费者模型 | 同一队列通常竞争消费 | 不同 consumer group 可独立重复消费同一事件流 |
| 长期回放 | 不是经典 queue/exchange 模型的强项 | 是默认核心能力 |
| 典型感觉 | “这件活谁来做?” | “这件事发生过什么?” |
一句话压缩:
RabbitMQ 更像“分拣派单”
Kafka 更像“城市总账流水”所以如果你的问题是:
- “给某个工人派活”
- “失败要重试”
- “不同标签派给不同系统”
- “一个任务只需要一个 worker 做完”
RabbitMQ 很自然。
如果你的问题是:
- “我要保留半年事件流”
- “多个团队各自独立回放”
- “做实时分析和离线重算”
- “需要事件日志作为系统事实来源”
Kafka 更自然。
要特别注意一个边界:
本篇说的是 RabbitMQ 最常见的 queue/exchange 心智。RabbitMQ 也有 Streams,但工程上大多数人说 RabbitMQ,默认还是在说这种‘消息队列 + 路由分发’模型。