动机
在早期阶段,我们构建分布式中间件基于ActiveMQ 5.x(早于 5.3)。我们的国际业务将其用于异步通信,搜索,社交网络活动流,数据管道,甚至在其交易流程中。随着我们的交易业务吞吐量增加,源自我们的消息集群的压力也变得迫切。
为什么是RocketMQ
基于我们的研究,随着使用的队列和虚拟主题的增加,ActiveMQ IO 模块成为了瓶颈。 我们尽力通过节流,断路器或降级解决这个问题,但效果不佳。因此我们开始关注那时候比较流行的消息解决方案kafka。不幸的是,就低延迟和高可用方面而言,kafka不能解决我们的特殊需求,详情看这里。
在这种情况下,我们决定创造一个新的消息引擎来解决更广泛的使用场景,从传统的发布/订阅情景到大容量的实时零容错零容忍事物系统。我们认为这个解决方案可能是有益的,因此我们希望将它向社区开源。目前,有超过100家公司在生产环境中使用开源的RocketMQ版本。我们还发布了基于RocketMQ的商业发行版,一种被称为阿里云平台的paas产品。
下面的表格展示RocketMQ,ActiveMQ 和Kafka (来自awesome-java的流行消息解决方案)之间的对比
Rocket ,ActiveMQ ,kafka比较
消息产品 | ActiveMQ | Kafka | RocketMQ |
---|---|---|---|
客户端SDK | Java, .NET, C++ 等 | Java, Scala 等 | Java, C++, Go |
协议和规范 | push模式,支持OpenWire, STOMP, AMQP, MQTT, JMS | pull模式,支持TCP | pull模式,支持TCP,JMS,OpenMessaging |
有序消息 | 独有消费者或队列可保证顺序 | 分区内保证消息顺序 | 保证严格的消息顺序,可优雅的横向扩展 |
定时消息 | 支持 | 不支持 | 支持 |
批量消息 | 不支持 | 支持,通过异步发送者 | 支持,通过同步模式避免消息丢失 |
广播消息 | 支持 | 不支持 | 支持 |
消息过滤器 | 支持 | 支持,可通过streams来过滤消息 | 支持,基于SqL92的属性过滤器表达式 |
服务器触发重发 | 不支持 | 不支持 | 支持 |
消息存储 | 支持快速持久化jdbc和高性能日志文件,例如levelDB,kahaDB | 高性能文件存储 | 高性能低延迟文件存储 |
消息回溯 | 支持 | 支持偏移量 | 支持时间偏移量 |
消息优先级 | 支持 | 不支持 | 支持 |
高可用故障转移 | 支持,依赖存储,kahadb需zookeeper | 支持,需要zookeeper | 支持,主从模式,不需其他组件 |
消息追踪 | 不支持 | 不支持 | 支持 |
配置 | 默认配置是低级别的,用户需优化配置参数 | kafka使用格式化键值对配置。值可通过文件或编程提供 | 开箱即用,用户只需关注一部分配置 |
管理和操纵工具 | 支持 | 支持,使用命令行暴露核心指标 | 支持,web和命令行暴露核心指标 |