为何选择 RocketMQ
为何选择 RocketMQ
在阿里巴巴 RocketMQ 开发的早期阶段,我们将其用于多种目的,包括异步通信、搜索、社交网络活动流、数据管道和交易流程。随着交易业务的增长,我们注意到消息集群的压力越来越大。
在观察和分析 ActiveMQ IO 模块的性能后,我们发现随着队列和虚拟主题数量的增加,存在瓶颈。我们尝试通过各种方法解决此问题,例如限流、熔断器和服务降级,但均不令人满意。我们还考虑使用流行的消息解决方案 Kafka,但它不符合我们对低延迟和高可靠性的要求(如下所述)。因此,我们决定开发一个新的消息引擎,能够处理更广泛的用例,从传统的发布/订阅到大容量、实时、零错误事务系统。
自诞生以来,Apache RocketMQ 以其简单的架构、丰富的功能和极高的可扩展性,被企业开发者和云厂商广泛采用。经过十多年的广泛场景打磨,RocketMQ 已成为金融级可靠业务消息的行业标准,并广泛应用于互联网、大数据、移动互联网、物联网等领域。
提示
下表显示了 RocketMQ、ActiveMQ 和 Kafka 之间的比较
RocketMQ、ActiveMQ 和 Kafka 对比
消息产品 | 客户端 SDK | 协议与规范 | 顺序消息 | 定时消息 | 批量消息 | 广播消息 | 消息过滤 | 服务端触发重投 | 消息存储 | 消息回溯 | 消息优先级 | 高可用与故障转移 | 消息轨迹 | 配置 | 管理与运维工具 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ActiveMQ | Java、.NET、C++ 等 | 推模型,支持 OpenWire、STOMP、AMQP、MQTT、JMS | 独占消费者或独占队列可确保顺序 | 支持 | 不支持 | 支持 | 支持 | 不支持 | 支持使用 JDBC 和高性能日志(如 levelDB、kahaDB)实现非常快速的持久化 | 支持 | 支持 | 支持,取决于存储,如果使用 levelDB 则需要 ZooKeeper 服务器 | 不支持 | 默认配置级别较低,用户需要优化配置参数 | 支持 |
Kafka | Java、Scala 等 | 拉模型,支持 TCP | 确保分区内消息的顺序性 | 不支持 | 支持,使用异步生产者 | 不支持 | 支持,可以使用 Kafka Streams 过滤消息 | 不支持 | 高性能文件存储 | 支持通过偏移量指定 | 不支持 | 支持,需要 ZooKeeper 服务器 | 不支持 | Kafka 使用键值对格式进行配置。这些值可以从文件或通过编程方式提供。 | 支持,使用终端命令暴露核心指标 |
RocketMQ | Java、C++、Go | 拉模型,支持 TCP、JMS、OpenMessaging | 确保严格的消息顺序性,并可优雅地横向扩展 | 支持 | 支持,采用同步模式避免消息丢失 | 支持 | 支持基于 SQL92 的属性过滤表达式 | 支持 | 高性能、低延迟文件存储 | 支持时间戳和偏移量两种指定方式 | 不支持 | 支持主从模式,无需其他套件 | 支持 | 开箱即用,用户只需关注少量配置 | 支持,丰富的 Web 和终端命令暴露核心指标 |