Apache RocketMQ是一个分布式消息和流式数据处理平台,具备低延迟,高性能和高可靠性等特性。 其官方网站上的介绍有如下特色:编程
如上图所示,它由四部分组成:名称服务器,代理服务器,生产者和消费者。它们中的每个均可以水平扩展,而不会出现单点故障。服务器
名称服务器集群网络
名称服务器提供轻量级服务发现和路由。每一个名称服务器记录完整的路由信息,提供相应的读写服务,支持快速的存储扩展。架构
代理集群异步
代理关注的是消息存储,它经过提供轻量级主题和队列机制来处理消息存储,他们支持推,拉模型,包含容错机制(容许2个副本或3个副本),可以抵御强峰值,而且按序积压千亿条消息的的功能。此外,代理还提供容灾,丰富的度量统计数据和报警机制,这些都是传统消息系统所缺乏的。分布式
生产者集群工具
生产者支持分布式部署,分布式生产者经过多种负载平衡模式向代理集群发送消息,发送进程支持快速故障和低延迟。post
消费者集群性能
消费者集群也支持推拉模式中的分布式部署。它还支持集群消息和消息广播。它提供了实时消息订阅机制,能够知足大多数用户的需求。大数据
名称服务器是一个功能齐全的服务器,主要包含该两个功能:
代理服务器负责消息存储和传递,消息查询,高可用保证等。
以下图所示, 代理服务器有几个重要的子模块:
如何快速上手RocketMQ,将其服务搭建在本地计算机中,请看这里
RocketMQ事务性消息中是如何设计的请看这里
为何RocketMQ可以支持更多的队列?请看这里
在早期阶段,阿里构建了基于ActiveMQ5.x(早于5.3)的分布式消息中间件。使用它进行异步通讯,搜索,社交网络活动流,数据管道,甚至在交易中使用。随着业务吞吐量增长,来自消息系统集群的压力也变得紧迫。
随着队列的增长和虚拟主题的使用,ActiceMQ IO模块遇到了瓶颈。尽管经过节流。断路或退化来解决这个问题,可是效果并很差。阿里开始关注流行的消息传递解决方案Kafka。不幸的是,Kafka不能知足他们的要求,特别是在低延迟和高可靠性方面。
下面的表中是RocketMQ,ActiveMQ和Kafka解决方案的比较。
比较项目 | ActiveMQ | Kafka | RocketMQ |
---|---|---|---|
客户端SDK | Java, .NET, C++ etc. | Java, Scala etc. | Java, C++, Go |
协议和规范 | 推送模型, 支持OpenWire,STOMP, AMQP, MQTT, JMS | 推送模型, 支持TCP协议 | 推送模型,支TCP,JMS, 开放消息 |
顺序消息 | 专有消费者或专有队列 | 确保分区内的消息的顺序 | 确保严格的消息顺序,并能优雅的扩展 |
定时消息 | 支持 | 不支持 | 支持 |
批量消息 | 不支持. | 支持,异步生产 | 支持,使用同步的模式以免消息丢失 |
广播消息 | 支持 | 不支持 | 支持 |
消息过滤 | 支持 | 支持, 可使用Kafka流来筛选消息 | 支持,基于SQL92的属性筛选表达式 |
服务器端触发的重试 | 不支持 | 不支持 | 支持 |
消息存储 | 支持使用JDB和高性能日志(如LEVELDB, KAHADB) 快速持久化 | 高性能问价存储 | 高性能和低延迟文件存储 |
消息可追溯 | 支持 | 支持 | 支持,时间戳和偏移量 |
消息优先级 | 支持 | 不支持 | 不支持 |
高可用和灾备 | 支持,根据存储状况,若是使用kahad, 则须要一个ZooKeeper服务器 | 支持,须要ZooKeeper服务 | |
消息追踪 | 不支持 | 不支持 | 主从模型.不带有其余套件 |
配置 | 默认配置为低级别,用户须要优化配置参数 | Kafk经过配置key value的形式在配置文件中进行配置,也支持编程方式配置. | 支持 |
管理和操做工具 | 支持 | 支持,经过终端命令能够进行配置 | 开箱即用, 用户只须要注意一些配置 |