MQ选型
从17个维度综合对比Kafka、RabbitMQ、ZeroMQ、RocketMQ、ActiveMQ这5款当前最主流的MQ消息中间件产品,希望能为您的下一次产品的架构设计和MQ消息中间件选型提供参考依据。
Kafka | RabbitMQ | ZeroMQ | RocketMQ | ActiveMQ | |
资料文档 | 中等 | 多 | 少 | 少 | 多 |
开发语言 | Scala | Erlang | C语言 | Java | Java |
支持的协议 | 自定义(基于TCP) | AMQP | TCP、UDP | 自定义 | OpenWire、STOMP、REST、XMPP、AMQP |
消息存储 | 内存、磁盘、数据库;支持大量堆积 | 内存、磁盘;支持少量堆积 | 消息发送端的内存或者磁盘中;不支持持久化 | 磁盘;支持大量堆积 | 内存、磁盘、数据库;支持少量堆积 |
消息事务 | 支持 | 支持 | 不支持 | 支持 | 支持 |
负载均衡 | 支持 | 支持的不好 | 去中心化,不支持负载均衡 | 支持 | 可基于zookeeper实现负载均衡 |
集群方式 | 天然的‘Leader-Slave’无状态集群 | 支持简单集群 对高级集群模式支持不好 | 去中心化,不支持集群 | 常用 多对'Master-Slave' 模式 | 支持简单集群模式对高级集群模式支持不好 |
管理界面 | 一般 | 好 | 无 | 有管理后台 | 一般 |
可用性 | 非常高(分布式) | 高(主从) | 高 | 非常高(分布式) | 高(主从) |
消息重复 | 支持at least once、at most once | 支持at least once、at most once | 只有重传机制,但是没有持久化 | 支持at least once | 支持at least once |
吞吐量TPS | 极大 | 比较大 | 极大 | 大 | 比较大 |
订阅形式和消息分发 | 发布订阅模式 | direct、topic、Headers和fanout | 点对点(p2p) | 发布订阅模式 | 点对点(p2p)、广播(发布-订阅) |
顺序消息 | 支持 | 不支持 | 不支持 | 支持 | 不支持 |
消息确认 | 支持 | 支持 | 支持 | 支持 | 支持 |
消息回溯 | 支持指定分区offset位置的回溯 | 不支持 | 不支持 | 支持指定时间点的回溯 | 不支持 |
消息重试 | 不支持 | 不支持 | 不支持 | 支持 | 不支持 |
并发度 | 并发度高 | 并发度极高 | 并发度高 | 并发度高 | 并发度高 |