跳到主要内容
版本: 5.0

为何选择 RocketMQ

为何选择 RocketMQ

在阿里巴巴 RocketMQ 开发的早期阶段,我们将其用于多种目的,包括异步通信、搜索、社交网络活动流、数据管道和交易流程。随着交易业务的增长,我们注意到消息集群的压力越来越大。

在观察和分析 ActiveMQ IO 模块的性能后,我们发现随着队列和虚拟主题数量的增加,存在瓶颈。我们尝试通过各种方法解决此问题,例如限流、熔断器和服务降级,但均不令人满意。我们还考虑使用流行的消息解决方案 Kafka,但它不符合我们对低延迟和高可靠性的要求(如下所述)。因此,我们决定开发一个新的消息引擎,能够处理更广泛的用例,从传统的发布/订阅到大容量、实时、零错误事务系统。

自诞生以来,Apache RocketMQ 以其简单的架构、丰富的功能和极高的可扩展性,被企业开发者和云厂商广泛采用。经过十多年的广泛场景打磨,RocketMQ 已成为金融级可靠业务消息的行业标准,并广泛应用于互联网、大数据、移动互联网、物联网等领域。

提示

下表显示了 RocketMQ、ActiveMQ 和 Kafka 之间的比较

RocketMQ、ActiveMQ 和 Kafka 对比

消息产品客户端 SDK协议与规范顺序消息定时消息批量消息广播消息消息过滤服务端触发重投消息存储消息回溯消息优先级高可用与故障转移消息轨迹配置管理与运维工具
ActiveMQJava、.NET、C++ 等推模型,支持 OpenWire、STOMP、AMQP、MQTT、JMS独占消费者或独占队列可确保顺序支持不支持支持支持不支持支持使用 JDBC 和高性能日志(如 levelDB、kahaDB)实现非常快速的持久化支持支持支持,取决于存储,如果使用 levelDB 则需要 ZooKeeper 服务器不支持默认配置级别较低,用户需要优化配置参数支持
KafkaJava、Scala 等拉模型,支持 TCP确保分区内消息的顺序性不支持支持,使用异步生产者不支持支持,可以使用 Kafka Streams 过滤消息不支持高性能文件存储支持通过偏移量指定不支持支持,需要 ZooKeeper 服务器不支持Kafka 使用键值对格式进行配置。这些值可以从文件或通过编程方式提供。支持,使用终端命令暴露核心指标
RocketMQJava、C++、Go拉模型,支持 TCP、JMS、OpenMessaging确保严格的消息顺序性,并可优雅地横向扩展支持支持,采用同步模式避免消息丢失支持支持基于 SQL92 的属性过滤表达式支持高性能、低延迟文件存储支持时间戳和偏移量两种指定方式不支持支持主从模式,无需其他套件支持开箱即用,用户只需关注少量配置支持,丰富的 Web 和终端命令暴露核心指标