RocketMQ 分享

栏目: 后端 · 发布时间: 5年前

内容简介:Apache RocketMQ是一个分布式消息和流媒体平台,具有低延迟,高性能和高可靠性,亿万级容量和灵活的可扩展性.它由四部分组成: 名称服务器,代理服务器,生产者和消费者.它们中的每一个都可以水平扩展,而不会出现单点故障.如上图所示.名称服务器提供轻量级服务发现和路由.每个名称服务器记录完整的路由信息,提供相应的读写服务,支持快速的存储扩展.代理关注的是消息存储,它通过提供轻量级主题和队列机制来处理消息存储.他们支持推拉模型,包含容错机制(2个副本和三个副本), 并提供原始时间顺序累计千亿条消息的峰值填
RocketMQ 分享

Apache RocketMQ是一个分布式消息和流媒体平台,具有低延迟,高性能和高可靠性,亿万级容量和灵活的可扩展性.它由四部分组成: 名称服务器,代理服务器,生产者和消费者.它们中的每一个都可以水平扩展,而不会出现单点故障.如上图所示.

名称服务器集群

名称服务器提供轻量级服务发现和路由.每个名称服务器记录完整的路由信息,提供相应的读写服务,支持快速的存储扩展.

代理集群

代理关注的是消息存储,它通过提供轻量级主题和队列机制来处理消息存储.他们支持推拉模型,包含容错机制(2个副本和三个副本), 并提供原始时间顺序累计千亿条消息的峰值填充和容量.此外,代理还提供容灾,丰富的度量统计数据和报警机制,这些都是传统消息系统所缺少的.

生产者集群

生产者支持分布式部署,分布式生产者通过多种负载平衡模式向代理集群发送消息,发送进程支持快速故障和低延迟.

消费者集群

消费者集群也支持推拉模式中的分布式部署.它还支持集群消息和消息广播.它提供了实时消息订阅机制,可以满足大多数用户的需求,RocketMQ的网站为感兴趣的用户提供了一个非常简单的快速入门指南.

Name Service

名称服务器是一个功能齐全的服务器,主要包含该两个功能:

  • 代理管理, 名称服务器从代理集群接收注册,并提供心跳机制来检查代理是否存活.
  • 路由管理, 每个名称服务器将保存有关代理集群的整个路由信息和用于客户端查询的队列信息.

Broker Service

代理服务器负责消息存储和传递,消息查询, 高可用保证等.

如下图所示, 代理服务器有几个重要的子模块:

RocketMQ 分享
  • 远程处理模块:代理的入口,处理来自客户端的请求.
  • 客户端管理模块:管理客户端(生产者/消费者)并维护消费者的主题订阅.
  • 存储服务模块: 提供简单的API来存储或查询物理磁盘中的消息.
  • 高可用服务模块: 在主代理和从代理之间提供数据同步功能.
  • 索引服务: 根据特定key,建立消息索引,并提供快速消息查询.

RocketMQ快速上手

如何快速上手RocketMQ,将其服务搭建在本机中,请看这里

RocketMQ的事务性消息

RocketMQ 分享

Half(Prepare) Message 指无法临时传递的消息。当消息成功发送到MQ服务器,但服务器没有收到来自生产者的消息的第二个确认,则该消息被标记为“临时不可交付”。此状态中的消息称为半消息。

Message Status Check 网络断开或生产者应用程序重新启动可能导致丢失事务消息的第二个确认。当MQ服务器发现一条消息长时间保持为半消息时,它将向消息生成器发送一个请求,检查消息的最终状态(提交或回滚)。

  1. 生产者发送一半消息到MQ服务器。
  2. 发送成功一半消息后,执行本地事务。
  3. 根据本地事务结果向MQ服务器发送提交或回滚消息。
  4. 如果提交/回滚信息遗漏或在本地事务的执行制作人的话,MQ服务器将检查消息发送到同一组中的每个生产者获得交易状态。
  5. 根据本地事务状态生成应答提交/回滚消息。
  6. 提交的消息将交付给使用者,但是回滚的消息将被MQ服务器丢弃。

设计

RocketMQ 分享

如图所示,为了屏蔽存储的底层实现,所有事务消息操作都集中在事务服务接口上。RocketMQ提供了一个默认实现自己的存储系统,我们使用事务桥实现事务性存储逻辑,而不是直接修改RocketMQ的存储层。

发送事务消息

RocketMQ 分享

此图描述了发送事务性消息的时间关系。从该图中,我们可以清楚地看到事务性消息是如何在两个阶段提交的.

检查事务消息

RocketMQ 分享

本图描述了检查逻辑事务消息,当MQ服务器发现消息仍是半消息很长一段时间,它将发送一个请求消息,得到当前事务的状态。

为什么RocketMQ能支持更多的队列?

RocketMQ与其他MQ比较

在早期阶段,阿里构建了基于ActiveMQ 5.x(早于5.3)的分布式消息中间件.使用它进行异步通信,搜索,社交网络活动流,数据管道,甚至在交易中使用.随着业务吞吐量增加,来自消息系统集群的压力也变得紧迫.

随着队列的增加和虚拟主题的使用,ActiceMQ IO模块遇到了瓶颈.尽管通过节流,断路或退化来解决这个问题,但是效果并不好.阿里开始关注流行的消息传递解决方案Kafka.不幸的是,Kafka不能满足他们的要求,特别是在低延迟和高可靠性方面

在这种情况下,他们决定发明一个新的消息传递引擎来处理更广泛的用例集,从传统的发布/订阅的场景到大容量实时零容忍事物系统.如今,有100多家公司在其业务中使用了开源版本的rocketMQ.同时还发布额一个基于RocketMQ的商业发行版,这是一个叫做阿里巴巴ONS的PaaS产品.

下面的表中是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流来筛选消息 支持,基于 SQL 92的属性筛选表达式
重试 不支持 不支持 支持
消息存储 支持使用JDB和高性能日志(如LEVELDB, KAHADB) 快速持久化 高性能问价存储 高性能和低延迟文件存储
消息可追溯 支持 支持 支持,时间戳和偏移量
消息优先级 支持 不支持 不支持
高可用和灾备 支持,根据存储情况,如果使用kahad, 则需要一个ZooKeeper服务器 支持,需要ZooKeeper服务
消息追踪 不支持 不支持 主从模型.不带有其他套件
配置 默认配置为低级别,用户需要优化配置参数 Kafk通过配置key value的形式在配置文件中进行配置,也支持编程方式配置. 支持
管理和操作工具 支持 支持,通过终端命令可以进行配置 开箱即用, 用户只需要注意一些配置

以上所述就是小编给大家介绍的《RocketMQ 分享》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新者的窘境(全新修订版)

创新者的窘境(全新修订版)

克莱顿•克里斯坦森 / 胡建桥 / 中信出版社 / 2014-1-1 / 48.00元

全球商业领域中,许多企业曾叱咤风云,但面对市场变化及新技术的挑战,最终惨遭淘汰。究其原因,竟然是因为它们精于管理,信奉客户至上等传统商业观念。这就是所有企业如今都正面临的“创新者的窘境”。 在《创新者的窘境》中,管理大师克里斯坦森指出,一些看似很完美的商业动作——对主流客户所需、赢利能力最强的产品进行精准投资和技术研发——最终却很可能毁掉一家优秀的企业。他分析了计算机、汽车、钢铁等多个行业的......一起来看看 《创新者的窘境(全新修订版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具