主流MQ对比和选型

在以下几个我们比较关心的维度进行对比

| | ActiveMQ | RabbitMQ | RocketMQ | kafka |
| 官网 | https://activemq.apache.org/ | https://www.rabbitmq.com/ | https://rocketmq.apache.org/ | https://kafka.apache.org/ |
| github | https://github.com/apache/activemq | https://github.com/rabbitmq | https://github.com/apache/rocketmq | https://github.com/apache/kafka |
| 开发语言(二次开发参考) | Java | Erlang | Java | Scala |
| SDK语言支持(技术选型和二次开发参考) | Java、C、C++、C#、Ruby、Perl、Python、PHP等 | Java、C#、Erlang、.Net | Java、C++、C#、Go | Scala |
| 协议支持 | OpenWire、Stomp、AMQP、MQTT、JMS | AMQP、STOMP、MQTT、 RabbitMQ Streams | TCP、JMS、 OpenMessaging | TCP |
| 是否支持事务 | 支持 *** ** * ** *** 在 ActiveMQ 中,事务消息通常与会话(Session)对象一起使用。您可以创建一个事务性会话(Transaction Session),然后在事务中发送或接收消息。 | 支持 *** ** * ** *** 在 RabbitMQ 中,事务消息通常与通道(Channel)对象一起使用。您可以在通道上开启一个事务,然后在事务中发送或接收消息。 | 支持 *** ** * ** *** 发送半消息(Half Message)->本地事务执行->确认事务消息 | Kafka在0.11.0.0版本开始支持事务消息 *** ** * ** *** 使用initTransactions()、beginTransaction()、sendOffsetToTransaction()和commitTransaction()来完成事务消息发送和消费的 |
| 是否支持批量消息 | 不支持 | 不支持 | 支持,具有同步模式,避免消息丢失 | 支持,使用异步生产者 |
| 消息可靠性 | 有较低的概率丢失数据 | | 经过参数优化配置,消息可以做到0丢失 | 经过参数优化配置,消息可以做到0丢失 |
| 单机吞吐量 | 万级 | 万级 | 10万级 | 10万级 |
| 高可用性和故障转移 | 支持,取决于存储,如果使用 levelDB,则需要 ZooKeeper 服务器 | 支持,集群方式通过镜像队列,将队列和它的消息存储复制到集群中的多个节点 | 支持主从模式,无需其他套件 | 支持,需要 ZooKeeper 服务器 |
| 管理台 | 一般 | 好 | 无,有社区版本web | 无 |
| 社区活跃度 | 高 | 高 | 中 | 高 |
| 持久化方式 | 内存、文件、数据库 | 内存、文件,支持数据堆积,但数据堆积会影响生产速率 | 磁盘文件 | 磁盘文件,只要磁盘容量足够,可以做到无限消息堆积 |

适用场景 非常成熟,功能强大 、性能一般;主要是基于解耦和异步来用的,较少在大规模吞吐的场景中使用 中小型公司,基础架构研发能力较弱,采用RabbitMQ是不错的选择,但是Erlang语言环境二次开发困难 性能较好,部署简单;有较大吞吐量需求,同时可能会有大量的topic,基础架构研发实力较强的大公司,完全可以采用RocketMQ 性能较好,超高的吞吐量;非常适合在大数据领域中数据收集以及日志采集中;单机topic不宜过多超过64个队列/分区性能下降
相关推荐
kingx31 天前
网络安全事件应急响应:X集团 WebServer 入侵溯源与处置
中间件·web·应急响应·取证·恶意样本
特立独行的猫a2 天前
ROS 2 主流DDS中间件入门:Cyclone DDS 与 Fast DDS 完全指南
中间件·ros2·dds·fast dds·cyclone dds
小易老师AI实战2 天前
用中间件把任务规划嵌进智能体循环
中间件·状态管理·智能体·工具调用·langgraph·任务规划
绿蕉3 天前
从硬件内卷到“中间件荒“——仿真工具、开发接口、开源生态
中间件·机器人
小易老师AI实战3 天前
LangGraph Agent 任务规划中间件:TodoListMiddleware 原理解析
中间件·agent·langgraph·任务规划·大模型智能体
未秃头的程序猿3 天前
@ConditionalOnMissingBean 把我配好的 RabbitMQ 手动 ack 吃掉了
后端·rabbitmq
一条泥憨鱼3 天前
【RabbitMQ】高级篇
java·分布式·rabbitmq·php·ruby
eleven_4u4 天前
QPS如何计算,如何部署架构
java·linux·运维·jvm·中间件
喵了几个咪5 天前
GoWind ShortPlay 拆解:Ent privacy/viewer 多租户隔离——从中间件到 SQL 的零信任链
sql·中间件·信任链
阳光不锈@6 天前
三大主流消息队列架构设计思想剖析:从 RabbitMQ 到 RocketMQ 的改造实践
kafka·rabbitmq·rocketmq·rabbit改造rocket·去除rabbitmq·rabbitmq改造