内容简介:Apache RocketMQ是一个分布式消息和流媒体平台,具有低延迟,高性能和高可靠性,亿万级容量和灵活的可扩展性.它由四部分组成: 名称服务器,代理服务器,生产者和消费者.它们中的每一个都可以水平扩展,而不会出现单点故障.如上图所示.名称服务器提供轻量级服务发现和路由.每个名称服务器记录完整的路由信息,提供相应的读写服务,支持快速的存储扩展.代理关注的是消息存储,它通过提供轻量级主题和队列机制来处理消息存储.他们支持推拉模型,包含容错机制(2个副本和三个副本), 并提供原始时间顺序累计千亿条消息的峰值填
Apache RocketMQ是一个分布式消息和流媒体平台,具有低延迟,高性能和高可靠性,亿万级容量和灵活的可扩展性.它由四部分组成: 名称服务器,代理服务器,生产者和消费者.它们中的每一个都可以水平扩展,而不会出现单点故障.如上图所示.
名称服务器集群
名称服务器提供轻量级服务发现和路由.每个名称服务器记录完整的路由信息,提供相应的读写服务,支持快速的存储扩展.
代理集群
代理关注的是消息存储,它通过提供轻量级主题和队列机制来处理消息存储.他们支持推拉模型,包含容错机制(2个副本和三个副本), 并提供原始时间顺序累计千亿条消息的峰值填充和容量.此外,代理还提供容灾,丰富的度量统计数据和报警机制,这些都是传统消息系统所缺少的.
生产者集群
生产者支持分布式部署,分布式生产者通过多种负载平衡模式向代理集群发送消息,发送进程支持快速故障和低延迟.
消费者集群
消费者集群也支持推拉模式中的分布式部署.它还支持集群消息和消息广播.它提供了实时消息订阅机制,可以满足大多数用户的需求,RocketMQ的网站为感兴趣的用户提供了一个非常简单的快速入门指南.
Name Service
名称服务器是一个功能齐全的服务器,主要包含该两个功能:
- 代理管理, 名称服务器从代理集群接收注册,并提供心跳机制来检查代理是否存活.
- 路由管理, 每个名称服务器将保存有关代理集群的整个路由信息和用于客户端查询的队列信息.
Broker Service
代理服务器负责消息存储和传递,消息查询, 高可用保证等.
如下图所示, 代理服务器有几个重要的子模块:
- 远程处理模块:代理的入口,处理来自客户端的请求.
- 客户端管理模块:管理客户端(生产者/消费者)并维护消费者的主题订阅.
- 存储服务模块: 提供简单的API来存储或查询物理磁盘中的消息.
- 高可用服务模块: 在主代理和从代理之间提供数据同步功能.
- 索引服务: 根据特定key,建立消息索引,并提供快速消息查询.
RocketMQ快速上手
如何快速上手RocketMQ,将其服务搭建在本机中,请看这里
RocketMQ的事务性消息
Half(Prepare) Message 指无法临时传递的消息。当消息成功发送到MQ服务器,但服务器没有收到来自生产者的消息的第二个确认,则该消息被标记为“临时不可交付”。此状态中的消息称为半消息。
Message Status Check 网络断开或生产者应用程序重新启动可能导致丢失事务消息的第二个确认。当MQ服务器发现一条消息长时间保持为半消息时,它将向消息生成器发送一个请求,检查消息的最终状态(提交或回滚)。
- 生产者发送一半消息到MQ服务器。
- 发送成功一半消息后,执行本地事务。
- 根据本地事务结果向MQ服务器发送提交或回滚消息。
- 如果提交/回滚信息遗漏或在本地事务的执行制作人的话,MQ服务器将检查消息发送到同一组中的每个生产者获得交易状态。
- 根据本地事务状态生成应答提交/回滚消息。
- 提交的消息将交付给使用者,但是回滚的消息将被MQ服务器丢弃。
设计
如图所示,为了屏蔽存储的底层实现,所有事务消息操作都集中在事务服务接口上。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 分享》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 分享功能之pc端分享和微信分享(vue版)
- 算法精讲:分享一道值得分享的算法题
- 【技术分享】针对AIX系统的渗透测试技巧分享
- 单页面路由工程使用微信分享及二次分享解决方案
- DockOne微信分享(二一一):基于Actor模型的CQRS/ES解决方案分享
- h5 vue引入微信sdk 实现分享朋友圈,分享给朋友,获取地理位置
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。