RabbitMQ vs Kafka
任务队列 vs 日志流;选型对照。
25 分钟
RabbitMQ vs Kafka
RabbitMQ 是 队列型、路由灵活、ack 删除;Kafka 是 日志型、高吞吐、offset 重放。选型看业务是「领任务」还是「录事件」,不是简单比性能。与 kafka-vs-mq 互为对照。
学习目标
- 对比存储模型、消费语义与运维关注点
- 为 CodeRoadMap 场景各举一例该用谁
- 说明主栈为何 MySQL + Redis,MQ 均为扩展
核心内容
模型对比
| 维度 | RabbitMQ | Kafka |
|---|---|---|
| 存储 | Queue,ack 后删 | 分区日志,保留策略 |
| 路由 | Exchange 四类 | Topic + key 分区 |
| 回溯 | 一般不支持 | offset 重放 |
| 吞吐 | 中高 | 极高 |
| 顺序 | 单队列有序 | 分区内有序 |
| 协议 | AMQP | 自有 |
RabbitMQ:「任务进队,工人领走确认」
Kafka: 「事件入账本,订阅者按进度读」
场景举例
更适合 RabbitMQ(本站 lab)
- 课时导出、邮件发送等 后台任务
- 需要 复杂路由(topic exchange、DLX)
- 团队熟悉 AMQP / Management UI
更适合 Kafka
- 用户行为、审计 多下游订阅 + 重放
- 超高吞吐事件管道
- 与 Kafka Streams 做实时聚合(kafka-streams)
仍用 Redis
- 缓存、Session(redis-session)
- 轻量 Pub/Sub 失效广播(redis-pubsub)
CodeRoadMap 立场
主栈:MySQL 真相 + REST API + 可选 Redis(spring-boot-essentials)。RabbitMQ 练 任务队列;Kafka 练 事件流;二者都不替代事务库。小项目 Cron + MySQL 状态机 往往够用,理解 MQ 是为了规模上来时有备选。
练习
- 为「管理端批量导入 1 万条课时」选 RabbitMQ 或 Kafka,写两条理由
- fanout 与 Kafka 多 consumer group 的相似与不同各写一点