Apache RocketMQ 介绍

本贴最后更新于 1430 天前,其中的信息可能已经渤澥桑田

Apache RocketMQ 介绍

概要

Apache RocketMQ 是一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性,万亿级容量和灵活的可伸缩性。它的一个重要特性是支持非日志类型的可靠消息传送,非常适合运用在金融和电子商务领域。目前他是 Apache 社区的顶级项目,在全球有超过 100 家公司在其业务中使用 RocketMQ 的开源版本。

诞生

RocketMQ 起源于阿里巴巴。阿里巴巴最初由于业务需求,需要使用消息中间件。早期使用过 Notify,ActiveMQ 等。但在需求不断膨胀的情况下,ActiveMQ IO 模块遇到了瓶颈,几经努力但改善成果不佳。这时正值 Kafka 流行,于是引起了阿里巴巴开发团队的注意,对 kafka 的无限消息堆积,高效持久化速度等特性非常赞赏。但不幸的是,Kafka 不能满足他们的要求,特别是在低延迟和高可靠性方面。在这种情况下,阿里巴巴决定发明一个新的消息传递引擎来处理更广泛的用例集,从传统的发布/订阅方案到大批量实时零损失容忍交易系统。

里程碑

2012 年,阿里巴巴开始开发 RocketMQ,经历了数次双 11 核心交易链路检验。

2016 年 11 月 11 日,RocketMQ 又一次在阿里巴巴全球购物节上处理了 1.2 万亿个并发在线消息传输,随后阿里巴巴将 RocketMQ 捐献给 Apache Incubator。

2017 年 9 月 25 日 – Apache 软件基金会,连同 350 多个开源项目的全体志愿者、开发人员、管理人员、和孵化项目组织,宣布 Apache®RocketMQ™ 从 Apache 孵化器毕业成为顶级项目,这表明该项目的社区和产品已根据 ASF 的精英流程和原则得到了很好的管理。

现今,Apache RocketMQ 在社区各方面的努力下,茁壮发展,很多功能都得到了加强。

RocketMQ 的技术概览

在我们看来,它最大的创新点在于能够通过精巧的横向、纵向扩展,不断满足与日俱增的海量消息在高吞吐、高可靠、低延迟方面的要求。

目前 RocketMQ 主要由 NameServer、Broker、Producer 以及 Consumer 四部分构成,如下图所示。

NameServer 以轻量级的方式提供服务发现和路由功能,每个 NameServer 存有全量的路由信息,提供对等的读写服务,支持快速扩缩容。

Broker 负责消息存储,以 Topic 为纬度支持轻量级的队列,单机可以支撑上万队列规模,支持消息推拉模型,具备多副本容错机制(2 副本或 3 副本)、强大的削峰填谷以及上亿级消息堆积能力,同时可严格保证消息的有序性。除此之外,Broker 还提供了同城异地容灾能力,丰富的 Metrics 统计以及告警机制。这些都是传统消息系统无法比拟的。

Producer 由用户进行分布式部署,消息由 Producer 通过多种负载均衡模式发送到 Broker 集群,发送低延时,支持快速失败。

Consumer 也由用户部署,支持 PUSH 和 PULL 两种消费模式,支持集群消费和广播消息,提供实时的消息订阅机制,满足大多数消费场景。

特点

  • RocketMQ 支持异步实时刷盘,同步刷盘,同步复制,异步复制。具有高可靠性。不会因为操作系统的崩溃而导致数据丢失。
  • RocketMQ 经过一系列的实践和优化,处理速度从最初的 10,000TPS 到目前已经超过 50,000TPS。单纯比较 TPS 的话虽然还不如 Kafka 的百万级别,但在支持事务的消息中间件来说已经是非常优秀了。
  • RocketMQ 采用长轮询,消息投递延迟通常在几个毫秒左右。
  • RocketMQ 单机最高支持 5 万个队列,且负载不会发生明显递增。
  • RocketMQ 支持消费失败重试,这个特性非常适合运用在充值方面的应用。
  • RocketMQ 支持严格的意义上的消息顺序。即时在一台 Broker 宕机后,消息发送会失败,但是不会乱序。
  • RocketMQ 支持定时消息
  • RocketMQ 支持分布式事务消息
  • RocketMQ 支持根据消息标识或内容查询。
  • RocketMQ 支持按照时间来回溯消息,精度毫秒,例如从一天之前的某时某分某秒开始重新消费消息。

其他消息中间件

RabbitMQ 是 AMQP 规范的参考实现,AMQP 是一个线路层协议,面面俱到,很系统,也稍显复杂。目前 RabbitMQ 已经成为 OpenStack Iaas 平台首选的消息服务,其背后的支持力度不言而喻。

ActiveMQ 最初主要的开发者在 LogicBlaze,现在主要开发红帽,是 JMS 规范的参考实现,也是 Apache 旗下的老牌消息服务引擎。JMS 虽说是一个 API 级别的协议,但其内部还是定义了一些实现约束,不过缺少多语言支撑。ActiveMQ 的生态堪称丰富多彩,在该 Apache 顶级项目下,拥有不少子项目,包括由 HornetMQ 演变而来的 Artemis,基于 Scala 号称下一代 AMQ 的 Apollo 等。

而 Kafka 最初被设计用来做日志处理,是一个不折不扣的大数据通道,追求高吞吐,存在丢消息的可能。其背后的研发团队也围绕着 Kafka 进行了商业包装,目前在一些中小型公司被广泛使用。

下表是一目了然的快速参考,可快速发现 RocketMQ 及其最受欢迎的替代产品之间的差异。

Messaging Product Client SDK Protocol and Specification Ordered Message Scheduled Message Batched Message BroadCast Message Message Filter Server Triggered Redelivery Message Storage Message Retroactive Message Priority High Availability and Failover Message Track Configuration Management and Operation Tools
ActiveMQ Java, .NET, C++ etc. Push model, support OpenWire, STOMP, AMQP, MQTT, JMS Exclusive Consumer or Exclusive Queues can ensure ordering Supported Not Supported Supported Supported Not Supported Supports very fast persistence using JDBC along with a high performance journal,such as levelDB, kahaDB Supported Supported Supported, depending on storage,if using kahadb it requires a ZooKeeper server Not Supported The default configuration is low level, user need to optimize the configuration parameters Supported
Kafka Java, Scala etc. Pull model, support TCP Ensure ordering of messages within a partition Not Supported Supported, with async producer Not Supported Supported, you can use Kafka Streams to filter messages Not Supported High performance file storage Supported offset indicate Not Supported Supported, requires a ZooKeeper server Not Supported Kafka uses key-value pairs format for configuration. These values can be supplied either from a file or programmatically. Supported, use terminal command to expose core metrics
RocketMQ Java, C++, Go Pull model, support TCP, JMS, OpenMessaging Ensure strict ordering of messages,and can scale out gracefully Supported Supported, with sync mode to avoid message loss Supported Supported, property filter expressions based on SQL92 Supported High performance and low latency file storage Supported timestamp and offset two indicates Not Supported Supported, Master-Slave model, without another kit Supported Work out of box,user only need to pay attention to a few configurations Supported, rich web and terminal command to expose core metrics

文献参照

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...