RocketMQ 为什么选择RocketMQ?
翻译声明
本教程翻译自apache RocketMQ官网,源地址:http://rocketmq.apache.org/docs/quick-start/,翻译时间为,2019年1月4日,文章源以当天为准。个人能力限制,如果翻译的不准确或者有错误还望指正,个人邮箱:serfan@163.com,。
动机
在早期阶段,我们构建了基于ActiveMQ 5.x之前)的分布式消息中间件。我们的跨国企业将它用于异步通信、搜索、社交网络活动流、数据管道,甚至在贸易过程中。随着我们的贸易业务吞吐量增加,来自我们的消息传递集群的压力也变得紧迫。
为什么选择RocketMQ?
根据我们的研究,随着队列和 topic的增加,ActiveMQ IO模块遇到了瓶颈。我们尽力通过节流、断路或降级来解决这个问题,但效果不佳。所以我们开始关注当时流行的消息传递解决方案Kafka。不幸的是,Kafka无法满足我们的要求,特别是在低延迟和高可靠性方面。
在这种情况下,我们决定开发一种新的消息引擎来处理更广泛的用例,从传统的发布/订阅场景到大容量实时零损失容忍交易系统。我们相信这个解决方案是有益的,所以我们希望向社区开放源代码。如今,超过100家公司在其业务中使用开源版本的RocketMQ。我们还发布了一份基于RocketMQ的商业发行,这是一款名为阿里巴巴云平台的PaaS产品。
下表展示了RocketMQ、ActiveMQ和Kafka ( Apache根据awesome - java最流行的消息传递解决方案)之间的比较:
RocketMQ vs. ActiveMQ vs. Kafka
请注意,本文档是由RocketMQ团队编写的。尽管理想是对技术和特性进行公正的比较,但作者的专业知识和偏见显然更青睐RocketMQ。
下表是快速查找RocketMQ和它最受欢迎的替代品之间差异的便捷参考。
产品 | sdk | 协议规范 | 有序消息 | 预定消息 | 批量消息 | 广播信息 | 消息过滤 | 服务器触发的重新传递 | 信息存储 | 信息追溯 | 优先级 | 高可用性和故障转移 | 消息跟踪 | 配置 | 管理和操作工具 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ActiveMQ | java .NET C++等 | 推送模型,支持 OpenWire, STOMP, AMQP, MQTT, JMS | 独占消费者或 | 独占消费者或独占队列 | 支持 | 不支持 | 支持 | 支持 | 不支持 | 支持 | 支持 | 支持 | 不支持 | 默认为低级,需优化配置 | 支持 |
Kafka | Java, Scala等 | 拉取模型,支持TCP | 确保分区内消息的排序 | 不支持 | 支持 | 不支持 | 支持 | 不支持 | 高性能文件存储 | 支持偏移量指示 | 不支持 | 支持,需要zookeeper | 不支持 | 使用键值对进行配置 | 支持 |
RocketMQ | Java, C++, Go | 拉取模型,支持TCP,JMS,OpenMessaging | 严格的消息排序 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 支持 | 支持 | 支持 | 支持 |