系列文章目录
文章目录
前言
本文主要是RocketMQ核心概念中的RocketMQ整体架构的一些介绍,有不足之处希望读者们指出。
提示:以下是本篇文章正文内容,下面案例可供参考
一、RocketMQ整体架构
RocketMQ主要由三大主件(NameServer、Broker、Client)组成,如上图所示。
1.1、NameServer(注册与发现服务器)
NameServer,翻译过来就是名称服务器,Topic(是一个Message的目录)的路由注册中心,为Client提供关于Topic的路由信息,从而引导Client向Broker发送消息,需要注意的是,NameServer是一个几乎无状态节点,多个NameServer实例组成集群,但相互独立,没有信息交换。NameServer存储数据一致性方案用的是最终一致性方案。
主要作用是:为Client提供在内存中存储的关于Topic的路由信息(路由管理),监控更新Broker的实时状态(Broker管理)。
1.2、Broker(代理服务器)
Broker,翻译过来就是中间人,是一个消息存储和转发服务器,并且也是持久化Topic路由信息的地方。Broker是以Group为单位提供服务,一个Group主要是由Master和Slave组成。在 RocketMQ 中,Master服务承担读写操作,Slave服务器作为一个备份(Slave从Master同步数据(同步双写或异步复制看配置)),当Master服务器存在压力时,Slave服务器可以承担读服务(消息消费)。
每个Broker与NameServer集群中的所有节点建立长连接,每隔 30s 会向 NameServer 发送心跳包(包含存在在 Broker 上所有的 Topic 的路由信息),更新Broker信息、Topic路由信息等。
注:
一个Master可以对应多个Slave,一个Slave只能对应一个Master。Master与Slave的对应关系通过指定相同的BrokerName、不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。Broker不一定是物理机或虚拟机。
在 RocketMQ4.5.0 版本后引入了多副本机制,内部使用 Raft 协议保证Broker节点数据的强一致性。
1.3、Client(客户端)
1.3.1、Producer(消息生产者)
Producer与NameServer集群中的其中一个节点(随机选择)建立长连接,只有在连接异常的时候才会去连接集群中的另一NameServer节点。Producer每隔30秒从NameServer获取Topic路由信息,并向提供Topic服务的Broker Master建立长连接,且定时向Broker Master发送心跳。Producer完全无状态,可集群部署。
Producer负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到Broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。
注:
如果初始Producer在事务后出错崩溃,Broker会联系同一Producer Group中的不同Producer实例,继续提交或回滚事务。
1.3.2、Consumer(消息消费者)
Consumer与NameServer集群中的其中一个节点(随机选择)建立长连接,只有在连接异常的时候才会连接集群中的另一NameServer节点。Consumer每隔30秒从NameServer获取Topic路由信息,并向提供Topic服务的Broker Master、Broker Slave建立长连接,且定时向Broker Master、Broker Slave发送心跳。Consumer既可以从Broker Master订阅消息,也可以从Broker Slave订阅消息,订阅规则由Broker配置决定。
Consumer负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:
- 拉取式消费:拉式消费者从Broker拉取消息,一旦一批消息被拉取,用户应用系统将发起消费过程。
- 推取式消费:推取式消费,从另一方面讲,囊括了消息的拉取、消费过程,并保持了内部的其他工作,留下了一个回调接口给终端用户去实现,实现在消息到达时要执行的内容。
注:
一个Consumer Group中的消费者实例必须有确定的相同的订阅Topic,相同Consumer Group的每个Consumer实例平均分摊消息。一个条消息仅能被一个Consumer Group消费一次,实现了负载均衡和容错的功能。
总结
RocketMQ核心概念中的RocketMQ整体架构就先介绍到这里了,还有不少不全的地方,后续系列文章再补充,笔者欢迎各位大佬指出错误。
著作权归NoLongerConfused所有。商业转载请联系NoLongerConfused获得授权,非商业转载请注明出处。