RocketMQ系列文章---RocketMQ整体架构

系列文章目录



前言

本文主要是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获得授权,非商业转载请注明出处。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NoLongerConfused

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值