在早期阶段,我们构建了基于ActiveMQ5.x(早于5.3)的分布式消息中间件。我们的跨国企业使用它进行异步通信、搜索、社交网络活动流、数据管道,甚至在其贸易过程中。随着我们的贸易业务吞吐量增加,来自我们的消息传递集群的压力也变得紧迫。
ActiveMQ IO模块遇到了瓶颈。我们尽力通过节流、断路器或退化来解决这个问题,但效果并不好。不幸的是,Kafka不能满足我们的要求,特别是在低延迟和高可靠性方面。
在这种情况下,我们决定发明一个新的消息传递引擎来处理更广泛的用例集,从传统的pub/sub场景到大容量的实时零损失容忍事务系统。我们还发布了一个基于Rocketmq的商业发行版,这是一个名为Alibaba ONS的PaaS产品。
MQ产品 | ActiveMQ | Kafka | RocketMQ |
客户端SDK | Java, .NET, C++ 等. | Java, Scala 等. | Java, C++, Go |
协议和规范 | 消息推送模式,支持OpenWire, STOMP, AMQP, MQTT, JMS | 消息拉取模式,支持TCP | 消息拉取模式,支持TCP,JMS,OpenMessaging |
有序消息 | Exclusive Consumer 或Exclusive Queues 可以确保消息的有序性 | 确保分区内消息的顺序 | 确保严格的消息顺序, 可以优雅地扩展消息 |
定时消息 | 支持 | 不支持 | 支持 |
批处理消息 | 不支持 | 支持,需要async producer | 支持,使用同步模式来避免消息丢失 |
广播消息 | 支持 | 不支持 | 支持 |
消息过滤器 | 支持 | 支持,您可以使用Kafka Streams来过滤消息 | 支持,采用基于SQL92的属性过滤器 |
服务器触发的重新传递 | 不支持 | 不支持 | 支持 |
消息存储 | 使用带高性能journal的JDBC数据源,例如levelDB,kahaDB,可以支持非常快速的持久化 | 高性能文件存储 | 高性能和低延迟的文件存储 |
消息可追溯 | 支持 | 支持偏移量来追溯消息 | 支持时间戳和偏移量两个维度来追溯消息 |
消息优先级 | 支持 | 不支持 | 不支持 |
高可用性和故障转移 | 支持,取决于存储。如果使用kahadb,则需要一个zookeeper服务器 | 支持,需要ZooKeeper服务器 | 支持,主从模型,无需其它配套程序 |
消息追踪 | 不支持 | 不支持 | 支持 |
配置 | 默认配置为低级别,用户需要优化配置参数 | Kafka使用键值对格式来进行配置。这些值可以通过文件来提供,也可以通过编程方式提供 | 开箱即用,用户只需要关注很少的配置 |
管理和操作工具 | 支持 | 支持,提供终端命令 | 支持,提供丰富的网页和终端命令 |