消息队列选型
目录
| 维度 | Kafka | RabbitMQ | ZeroMQ | RocketMQ | ActiveMQ |
|---|---|---|---|---|---|
| 资料文档 | 中等 | 多 | 少 | 少 | 多 |
| 开发语言 | Scala | Erlang | C | Java | Java |
| 支持的协议 | 自定义基于 TCP | AMQP | TCP、UDP | 自定义 | OpenWire、STOMP、REST、XMPP、AMQP |
| 消息存储 | 内存、磁盘、数据库。支持大量堆积。 | 内存、磁盘。支持少量堆积。 | 消息发送端的内存或者磁盘中。不支持持久化。 | 磁盘。支持大量堆积。 | 内存、磁盘、数据库。支持少量堆积。 |
| 消息事务 | 支持 | 支持 | 不支持 | 支持 | 支持 |
| 负载均衡 | 支持 | 支持不好 | 不支持 | 支持 | 支持(基于 zookeeper) |
| 集群方式 | 支持 | 支持简单集群 | 不支持 | 支持 | 支持 |
| 管理界面 | 一般 | 好 | 无 | 有,非自带 | 一般 |
| 可用性 | 非常高(分布式) | 高(主从) | 高 | 非常高(分布式) | 高(主从) |
| 消息重复 | 支持 at least once、at most once | 支持 at least once、at most once | 有重传,没有持久化 | 支持 at least once | 支持 at least once |
| 吞吐量 TPS | 极大 | 比较大 | 极大 | 大 | 比较大 |
| 消费推拉模式 | 拉 | 推 | 推 | 拉 | 推 |
| 订阅形式和消息分发 | 基于 topic 及按 topic 正则匹配的发布订阅模式 | direct、topic、Headers 和 fanout。 | 点对点(p2p) | 基于 topic/messageTag 及按消息类型、属性正则匹配的发布订阅 | 点对点(p2p)、广播(发布-订阅) |
| 顺序消息 | 支持 | 不支持 | 不支持 | 支持 | 不支持 |
| 消息确认 | 支持 | 支持 | 支持 | 支持 | 支持 |
| 消息回溯 | 支持指定分区 offset 位置的回溯 | 不支持 | 不支持 | 支持指定时间点的回溯 | 不支持 |
| 消息重试 | 不支持,但是可以实现 | 不支持,可以利用消息确认机制实现 | 不支持 | 支持 | 不支持 |
| 并发度 | 高 | 极高 | 高 | 高 | 高 |
| 延迟队列 | 不支持 | 支持 | 不支持 | 支持 | 不支持 |
| 死信队列 | 不支持 | 支持 | 不支持 | 支持 | 不支持 |
| 优先级队列 | 不支持 | 支持 | 不支持 | 不支持 | 不支持 |