RocketMQ架构
Apache RocketMQ是一个分布式消息和流式数据处理平台,具有低延迟,高性能和高可靠性等特性。 其官方网站上的介绍有以下特点:
- 低延迟(Low Latency):在高压力下,99.6%+ 的响应时间在1ms内。
- 面向金融级别(Finance Oriented):具有高可用性的跟踪和审计功能。
- 行业可持续发展(Industry Sustainable):保证了万亿级的消息容量。
- 厂商中立(Vendor Neutral):厂商无关,平台无关的一个新的开放的分布式消息和流标准(4.1版本开始)。
- 支持大数据处理(BigData Friendly): 批量传输,多功能集成,可实现洪水吞吐。
- 大规模积累(Massive Accumulation):如果有足够多的磁盘空间,可以在不损失性能的情况下积压消息。
如上图所示,它由四部分组成:名称服务器,代理服务器,生产者和消费者。它们中的每一个都可以水平扩展,而不会出现单点故障。
名称服务器集群
名称服务器提供轻量级服务发现和路由。每个名称服务器记录完整的路由信息,提供相应的读写服务,支持快速的存储扩展。
代理集群
代理关注的是消息存储,它通过提供轻量级主题和队列机制来处理消息存储,他们支持推,拉模型,包含容错机制(允许2个副本或3个副本),能够抵御强峰值,并且按序积压千亿条消息的的功能。此外,代理还提供容灾,丰富的度量统计数据和报警机制,这些都是传统消息系统所缺少的。
生产者集群
生产者支持分布式部署,分布式生产者通过多种负载平衡模式向代理集群发送消息,发送进程支持快速故障和低延迟。
消费者集群
消费者集群也支持推拉模式中的分布式部署。它还支持集群消息和消息广播。它提供了实时消息订阅机制,可以满足大多数用户的需求。
Name Service
名称服务器是一个功能齐全的服务器,主要包含该两个功能:
- 代理管理: 名称服务器从代理集群接收注册,并提供心跳机制来检查代理是否存活。
- 路由管理: 每个名称服务器将保存有关代理集群的整个路由信息和用于客户端查询的队列信息。
Broker Service
代理服务器负责消息存储和传递,消息查询,高可用保证等。
如下图所示, 代理服务器有几个重要的子模块:
- 远程处理模块: 代理的入口,处理来自客户端的请求。
- 客户端管理模块: 管理客户端(生产者/消费者)并维护消费者的主题订阅。
- 存储服务模块: 提供简单的API来存储或查询物理磁盘中的消息。
- 高可用服务模块: 在主代理和从代理之间提供数据同步功能。
- 索引服务: 根据特定key,建立消息索引,并提供快速消息查询。
RocketMQ快速上手
如何快速上手RocketMQ,将其服务搭建在本地计算机中,请看这里
RocketMQ的事务性消息
RocketMQ事务性消息中是如何设计的请看这里
为什么RocketMQ能支持更多的队列?
为什么RocketMQ能够支持更多的队列?请看这里
RocketMQ与其他MQ比较
在早期阶段,阿里构建了基于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的形式在配置文件中进行配置,也支持编程方式配置. | 支持 |
管理和操作工具 | 支持 | 支持,通过终端命令可以进行配置 | 开箱即用, 用户只需要注意一些配置 |