Apache RocketMQ
RocketMQ[2]是一个分布式消息和流数据平台,具有低延迟、高性能、高可靠性、万亿级容量和灵活的可扩展性。RocketMQ是2012年阿里巴巴开源的第三代分布式消息中间件,2016年11月21日,阿里巴巴向Apache软件基金会捐赠了RocketMQ;第二年2月20日,Apache软件基金会宣布Apache RocketMQ成为顶级项目。
开发者 | Apache软件基金会 |
---|---|
首次发布 | 2012年 |
当前版本 |
|
源代码库 | |
编程语言 | Java |
操作系统 | 跨平台 |
类型 | 流处理, 消息代理 |
许可协议 | Apache许可证 2.0 |
网站 | rocketmq |
历史
RocketMQ的发展可分为三个阶段。[3]
第一代在数据传输中使用push模式,在数据存储中使用关系型数据库。它展现了消息传递的低延迟,并且满足了具有分布式事务的典型电子商务平台[4] 的用途。
第二代在数据传输中使用pull模式,在数据存储中使用文件系统。它更注重稳定性和可靠性,并显示出与第一代响应时间和Kafka日志收集相当的性能。
第三代将pull模式与一些push操作相结合。它继承了第一代和第二代的优点,并在并发性和大量数据场景中表现出高性能。
功能
各种消息传递解决方案之间已经进行了很多比较,众所周知,当主题数量急剧增加时,RocketMQ的吞吐量下降幅度远小于Kafka。[5]由于具有高性能、高可靠性和高实时性的特点,RocketMQ与其他协议组件在MQTT等各种消息场景中的结合也越来越多。[6]
客户端SDK | 协议和规范 | 有序消息 | 计划消息 | 批量消息 | 广播消息 | 消息过滤器 |
---|---|---|---|---|---|---|
Java,C++,Python,Go,Node.Js | Pull模式,支持TCP,JMS,OpenMessaging | 确保严格的消息排序,并可以优雅地扩展 | 支持 | 支持同步模式以避免的消息损失 | 支持 | 支持基于SQL92的属性过滤器表达式 |
服务器触发的重传递 | 消息储存 | 消息追溯 | 消息优先权 | 高可用性和故障转移 | 消息跟踪 | 配置 |
支持 | 高性能和低延迟的文件存储 | 支持时间戳和偏移量两种表示 | 不支持 | 支持Master-Slave模型,不需要其他组件 | 支持 | 开箱即用,用户只需要注意几个配置 |
架构
RocketMQ由四部分组成:命名服务器(Name Server)、代理(Broker)、生产者(Producer)和消费者(Consumer),其中每一个都可以水平扩展而没有单点故障,如上图所示。
命名服务器集群
命名服务器集群是用于服务发现的轻量级组件,它们可用于读取和写入路由信息。每个命名服务器可以记录全局信息,并支持快速存储扩展。
代理集群
代理集群使用轻量级主题(topic)和队列(queue)机制来管理数据存储。为了实现容错,代理提供2份或3份数据。客户端可以在Push和Pull模型中获取消息。此外,还支持灾难恢复和丰富的指标统计信息。
生产者集群
生产者(Producer)可以分布式部署,从生产者到代理的消息可以通过多路径进行平衡。此外,还支持快速故障恢复和低延迟。
消费者集群
消费者也可以在Push和Pull模型中进行分布式部署,他们可以实时订阅消息,以集群为单位消费消息,同时还支持消息广播。
应用
Apache RocketMQ至少可以应用到以下五个方面:
- 异构系统的集成;
- 应用程序之间的分离;
- 在事件驱动机制和复杂事件架构模型中的骨干;
- 数据复制渠道;
- 与流计算引擎集成。
社区维护
RocketMQ团队为活跃社区做了很多工作。聚会、研讨会、ApacheCon和Code Marathon定期在北京、深圳、杭州等地举行,以吸引新的贡献者和提交者。OpenMessaging基准测试套件目前可用于RocketMQ,它使RocketMQ与分布式消息传递的全球标准保持同步。[7]对于版本管理,采用了一系列标准化的软件开发过程。最新版本是4.2.0,4.3.0即将推出。可在此处(页面存档备份,存于互联网档案馆)获取更多信息。
获奖
2016年度最受欢迎中国开源软件奖(页面存档备份,存于互联网档案馆)
2017年度最受欢迎中国开源软件奖(页面存档备份,存于互联网档案馆)
参见
参考文献
- ^ Release 5.1.0. 2023年2月20日 [2023年3月8日].
- ^ apache/rocketmq. GitHub. [2018-05-25]. (原始内容存档于2019-08-01) (英语).
- ^ From Alibaba to Apache: RocketMQ’s Past, Present, and Future. InfoQ. [2018-06-26]. (原始内容存档于2018-06-19).
- ^ Toward a General Distributed Messaging Framework for Online Transaction Processing Applications - IEEE Journals & Magazine. ieeexplore.ieee.org. [2018-06-26]. (原始内容存档于2018-06-26) (美国英语).
- ^ Cloud, Alibaba. Kafka vs. RocketMQ- Multiple Topic Stress Test Results. Medium. 2018-01-04 [2018-07-08]. (原始内容存档于2018-07-08).
- ^ A MQTT Protocol Message Push Server Based on RocketMQ - IEEE Conference Publication. ieeexplore.ieee.org. [2018-06-26]. (原始内容存档于2018-06-19) (美国英语).
- ^ The OpenMessaging Benchmark Framework. openmessaging.cloud. [2018-07-08]. (原始内容存档于2018-06-25).
外部链接
- Apache RocketMQ网站(页面存档备份,存于互联网档案馆)
- Apache RocketMQ Externals(页面存档备份,存于互联网档案馆)
- 基于RocketMQ的MQTT协议消息推送服务器(页面存档备份,存于互联网档案馆)