首页 / 知识库 / python服务端进阶 / 消息队列入门

04 - 选型:RabbitMQ 还是 Kafka 还是 Redis

概念都懂了,现在面对现实问题:到底用哪个? 市面上消息队列一大堆,但对你(Python + FastAPI 后端)来说,真正需要在意的就三个:RabbitMQ、Kafka、Redis。这一章帮你彻底理清它们的定位差异,并解释为什么本教程给你定了 RabbitMQ。


4.1 一句话认清三者的定位

框架一句话定位打个比方
RabbitMQ专业、灵活的消息队列,擅长复杂的任务分发与路由一个训练有素的邮局:能按各种规则把信精准投递到对应信箱
Kafka高吞吐的事件流平台,为海量数据流、日志而生一条永不停歇的传送带:数据像流水一样源源不断地过
Redis内存数据库顺便能当轻量队列一个身兼数职的便利店:主业卖东西,也能帮你临时寄存包裹

核心区别:RabbitMQ 是”为消息队列而生”,Kafka 是”为数据流而生”,Redis 是”为缓存而生,队列是副业”。


4.2 三者详细对比

维度RabbitMQKafkaRedis
本质专业消息中间件分布式事件流平台内存数据库(兼职做队列)
吞吐量万级/秒(够绝大多数业务用)百万级/秒(为海量而生)高(受内存与实现限制)
消息可靠性很强(持久化、确认、死信队列)很强(消息持久化到磁盘,可回溯重放)一般~较强(Stream 类型较可靠,List 简单)
路由能力⭐ 极强(交换机支持多种灵活路由)弱(按 Topic 分区,路由简单)
消息保留被消费确认后即删除按时间/大小保留,可反复重放历史看用法,通常消费即走
学习/运维成本中等较高(概念多:分区、副本、消费组、offset)低(你已经学过 Redis)
典型场景异步任务、服务解耦、削峰、复杂路由日志收集、大数据管道、埋点、实时流处理轻量异步任务、简单通知

4.3 什么时候用谁:给你一张决策图

你的需求是什么?

├─ 是"处理业务任务"(发邮件、下单后置处理、服务解耦、削峰)?
│     │
│     ├─ 项目很轻、任务简单、又不想多装一个 Broker,
│     │  而且已经在用 Redis?
│     │        → 【Redis】 够用,简单省事
│     │
│     └─ 想要正经、可靠、能灵活路由的消息队列?
│              → 【RabbitMQ】 ✅ 本教程主线,最标准的选择

└─ 是"处理海量数据流"(每秒几十万条日志、埋点、需要回放历史数据、
   接大数据/实时计算)?
          → 【Kafka】 专为此而生

一句话记忆:

  • 做业务、要可靠、要灵活 → RabbitMQ
  • 搞大数据流、超高吞吐、要回放 → Kafka
  • 场景简单、想省事、已经有 Redis → Redis

4.4 为什么本教程给你定 RabbitMQ

结合你的现状(正在学后端、已掌握 FastAPI + PostgreSQL + Redis + Docker),选 RabbitMQ 是最优解:

  1. 它是最好的”消息队列教材” 生产者、消费者、队列、交换机、路由、确认、死信……消息队列该有的核心概念,RabbitMQ 全都清晰完整。学会它,你就掌握了通用的 MQ 思维,以后看 Kafka 也能快速上手。

  2. 和 Python / FastAPI 生态最贴合 中小型 Web 系统做异步任务,主流就是 RabbitMQ(常配合 Celery)。你学完能直接用在真实项目里

  3. 比 Kafka 轻,负担小 Kafka 的分区、副本、消费组、offset 等概念是为”大数据流”设计的,对你现在”建立架构直觉”这个阶段是额外负担。等你真要处理海量数据流时再学它,不迟。

  4. 比 Redis 更”正经” Redis 当队列是”副业”,可靠性和功能都有限,适合轻量场景。而 RabbitMQ 是专业选手,能让你完整体会消息队列的全套机制。

结论:先用 RabbitMQ 把”消息队列”这件事彻底学明白。它是理解一切 MQ 的基石。至于 Kafka,把它当成”以后处理大数据流时的专用武器”,用到再学。


4.5 顺带一提:Celery 是什么?

学 Python 消息队列时你一定会听到 Celery,别搞混:

  • Celery 不是消息队列,它是一个 Python 的**“分布式任务队列”框架**。
  • 它自己不存消息,而是架在 RabbitMQ(或 Redis)之上,帮你把”定义任务、发任务、后台执行任务”这套流程封装得很好用。
┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│  FastAPI    │────▶│ Celery + Broker│────▶│ Celery Worker│
│ 调用任务      │     │ (RabbitMQ/Redis)│     │ 执行任务      │
└─────────────┘     └──────────────┘     └─────────────┘
                     ↑ RabbitMQ 在这里当"底层运输工"

简单说:RabbitMQ 是底层的”运输管道”,Celery 是上层帮你好用的”任务管理工具”。本教程聚焦讲清楚底层的 RabbitMQ 原理;等你理解了它,再用 Celery 会非常顺。


本章小结

知识点要点
三者定位RabbitMQ=专业消息队列;Kafka=海量事件流;Redis=缓存兼职做队列
选型主线做业务用 RabbitMQ;大数据流用 Kafka;轻量省事用 Redis
为什么选 RabbitMQ最标准的 MQ 教材、贴合 FastAPI 生态、比 Kafka 轻、比 Redis 正经
Celery 的关系Celery 是上层任务框架,RabbitMQ 是它底下的运输管道,两者常搭配

下一章预告:正式认识 RabbitMQ 的内部架构——交换机(Exchange)、队列、绑定、路由键,看它是怎么把消息精准送到对的地方的。


上一章 ← 03 - 解决的三大问题 | 下一章 → 05 - RabbitMQ 的架构与工作原理