Apache RocketMQ

RocketMQ是一个分布式消息和流数据平台，具有低延迟、高性能、高可靠性、万亿级容量和灵活的可扩展性。RocketMQ是2012年阿里巴巴开源的第三代分布式消息中间件，2016年11月21日，阿里巴巴向Apache软件基金会捐赠了RocketMQ；第二年2月20日，Apache软件基金会宣布Apache RocketMQ成为顶级项目。

 历史 
RocketMQ的发展可分为三个阶段。

第一代在数据传输中使用push模式，在数据存储中使用关系型数据库。它展现了消息传递的低延迟，并且满足了具有分布式事务的典型电子商务平台 的用途。

第二代在数据传输中使用pull模式，在数据存储中使用文件系统。它更注重稳定性和可靠性，并显示出与第一代响应时间和Kafka日志收集相当的性能。

第三代将pull模式与一些push操作相结合。它继承了第一代和第二代的优点，并在并发性和大量数据场景中表现出高性能。

 功能 
各种消息传递解决方案之间已经进行了很多比较，众所周知，当主题数量急剧增加时，RocketMQ的吞吐量下降幅度远小于Kafka。由于具有高性能、高可靠性和高实时性的特点，RocketMQ与其他协议组件在MQTT等各种消息场景中的结合也越来越多。
客户端SDK协议和规范有序消息计划消息批量消息广播消息消息过滤器Java，C++，Python，Go，Node.JsPull模式，支持TCP，JMS，OpenMessaging确保严格的消息排序，并可以优雅地扩展支持支持同步模式以避免的消息损失支持支持基于SQL92的属性过滤器表达式服务器触发的重传递消息储存消息追溯消息优先权高可用性和故障转移消息跟踪配置支持高性能和低延迟的文件存储支持时间戳和偏移量两种表示不支持支持Master-Slave模型，不需要其他组件支持开箱即用，用户只需要注意几个配置

 架构 
File:Rmq-structure.png

RocketMQ由四部分组成：命名服务器（Name Server）、代理（Broker）、生产者（Producer）和消费者（Consumer），其中每一个都可以水平扩展而没有单点故障，如上图所示。

 命名服务器集群 
命名服务器集群是用于服务发现的轻量级组件，它们可用于读取和写入路由信息。每个命名服务器可以记录全局信息，并支持快速存储扩展。

 代理集群 
代理集群使用轻量级主题（topic）和队列（queue）机制来管理数据存储。为了实现容错，代理提供2份或3份数据。客户端可以在Push和Pull模型中获取消息。此外，还支持灾难恢复和丰富的指标统计信息。

 生产者集群 
生产者（Producer）可以分布式部署，从生产者到代理的消息可以通过多路径进行平衡。此外，还支持快速故障恢复和低延迟。

 消费者集群 
消费者也可以在Push和Pull模型中进行分布式部署，他们可以实时订阅消息，以集群为单位消费消息，同时还支持消息广播。

 应用 
Apache RocketMQ至少可以应用到以下五个方面：

 异构系统的集成；
 应用程序之间的分离；
 在事件驱动机制和复杂事件架构模型中的骨干；
 数据复制渠道；
 与流计算引擎集成。

 社区维护 
RocketMQ团队为活跃社区做了很多工作。聚会、研讨会、ApacheCon和Code Marathon定期在北京、深圳、杭州等地举行，以吸引新的贡献者和提交者。OpenMessaging基准测试套件目前可用于RocketMQ，它使RocketMQ与分布式消息传递的全球标准保持同步。对于版本管理，采用了一系列标准化的软件开发过程。最新版本是4.2.0，4.3.0即将推出。可在此处获取更多信息。

 获奖 
2016年度最受欢迎中国开源软件奖

2017年度最受欢迎中国开源软件奖

第12次中日韩(中国-日本-韩国)开源软件优秀技术奖

2018年度最受欢迎中国开源软件奖

 参见 

 参考文献 

 外部链接 

 Apache RocketMQ网站
 Apache RocketMQ Externals
 基于RocketMQ的MQTT协议消息推送服务器

Category:面向消息的中间件
Category:Java平台
Category:Apache软件基金会项目
Category:有未审阅翻译的页面