消息队列
#markmap
消息队列是分布式系统中实现异步通信、解耦和削峰的核心组件。
技术选型
| 维度 | Kafka | RabbitMQ | RocketMQ |
|---|---|---|---|
| 吞吐量 | 百万级/秒 | 万级/秒 | 十万级/秒 |
| 延迟 | 毫秒级 | 微秒级 | 毫秒级 |
| 消息回溯 | 支持 offset 回溯 | 不支持 | 支持 |
| 事务消息 | 支持 | 不支持 | 支持 |
| 适用场景 | 日志收集、流处理 | 企业级应用 | 电商、金融 |
核心概念
| 概念 | 说明 |
|---|---|
| Producer | 消息生产者 |
| Consumer | 消息消费者 |
| Broker | 消息服务器 |
| Topic | 消息主题 |
| Queue/Partition | 消息分区 |
消息模式
| 模式 | 说明 |
|---|---|
| 点对点 | 一条消息只被一个消费者消费 |
| 发布/订阅 | 一条消息可被多个消费者消费 |
消息可靠性
消息可靠性需要从三个环节保证:
| 环节 | 措施 |
|---|---|
| 生产者 | 事务消息 / confirm 机制 / 重试 |
| Broker | 持久化 / 主从复制 / 同步刷盘 |
| 消费者 | 手动 ACK / 幂等消费 / 重试机制 |
消息语义
| 语义 | 说明 | 实现 |
|---|---|---|
| At-most-once | 最多一次,可能丢失 | 先提交再处理 |
| At-least-once | 最少一次,可能重复 | 先处理再提交 |
| Exactly-once | 精确一次 | 幂等 + 事务 |
选型建议
| 场景 | 推荐 |
|---|---|
| 日志收集与分析 | Kafka |
| 企业级应用、复杂路由 | RabbitMQ |
| 电商、金融、事务消息 | RocketMQ |
| 大数据生态集成 | Kafka |