加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

RocketMQ 架构详解

发布时间:2022-07-14 16:07:11 所属栏目:Linux 来源:互联网
导读:RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于集群中的不同的Broker Group。 路由元信息 topicQ
  RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于集群中的不同的Broker Group。
 
 
  路由元信息
 
  topicQueueTable:topic 消息队列路由信息。
 
  brokerAddrTable:broker基础信息。包含broker name,所属集群名称,主broker地址等。
 
  clusterAddrTable:broker集群信息,存储集群中所有broker的名称。
 
  brokerLiveTable:broker状态信息。
 
  filterServerTable:broker上的filterServer列表。filterServer用于消息过滤。
 
  路由注册  RocketMQ路由注册是通过broker与Namesrv的心跳功能实现的。broker启动时向集群中所有Namesrv发送心跳包,之后每隔30秒向集群中所有Namesrv发送心跳包。心跳包中包含:broker集群信息、broker信息、topic配置信息、broker关联的FilterServer列表等。如果brokerA为Master。并且brokerA上的topic1的配置信息发生变化或初次注册,Namesrv会根据报文创建或更新Topic路由元数据,填充topicQueueTable。
 
  路由发现  RocketMQ路由发现是非实时的。当Topic路由信息发生变化是,Namesrv不会主动推送给客户端(Producer、Consumer)。而是由客户端定时到Namesrv拉去最新的路由信息并缓存(包含Topic路由信息)。
 
  与kafka对比
 
  kafka 由zookeeper集群提供命名服务(Naming Service)。
 
  Kafka通过 ZooKeeper 管理集群配置、选举 Leader 以及在 consumer g
 
  Broker
 
  消息中转角色,负责存储消息、转发消息。代理服务器在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。
 
 
  与kafka对比:
 
  kafka和RocketMQ的broker都可以容纳多个一个或多个分区数据(kafka分区:partition;RocketMQ分区:queue)。
 
  kafka基于partition(分区) 做备份/高可用(partition follower)。
 
  RocketMQ增加了broker group的概念,基于broker(可能包含多个分区)。
 
                                                                                     Producer
 
  (消息)生产者。Producer与Namesrv集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的broker master建立长连接,且定时向broker master发送心跳。Producer完全无状态,可集群部署。
 
  Producer负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。
 
                                                                                       Consumer
 
  (消息)消费者 Consumer与Namesrv集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。
 
 
  其实很好理解:
 
  Namesrv集群提供高可用的命名服务。
 
  Producer、Consumer只需要从其中一台定期同步路由信息。
 
  如果Broker只随机调一台发送心跳包。那么不同的Namesrv保存的路由信息会出现
 
  消费者类型:
 
  拉取式消费(Pull Consumer) Consumer消费的一种类型,应用通常主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。一旦获取了批量消息,应用就会启动消费过程。Pull方式里,取消息的过程需要用户自己写(包括提交offset等操作)。
 
  推动式消费(Push Consumer) Consumer消费的一种类型,该模式下Broker收到数据后会主动推送给消费端,该消费模式一般实时性较高。Push Consumer原理上也是采取pull模式。实际上就是长轮询的pull模式。
 
  一些概念
 
  主题(Topic) 表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。每个topic可分为若干个分区(queue)。
 
  生产者组(Producer Group) 同一类Producer的集合,这类Producer发送同一类消息且发送逻辑一致。如果发送的是事务消息且原始生产者在发送之后崩溃,则Broker服务器会联系同一生产者组的其他生产者实例以提交或回溯消费。
 
  消费者组(Consumer Group) 同一类Consumer的集合,这类Consumer通常消费同一类消息且消费逻辑一致。消费者组使得在消息消费方面,实现负载均衡和容错的目标变得非常容易。要注意的是,消费者组的消费者实例必须订阅完全相同的Topic。RocketMQ 支持两种消息模式:集群消费(Clustering)和广播消费(Broadcasting)。
 
  普通顺序消息(Normal Ordered Message) 普通顺序消费模式下,消费者通过同一个消费队列收到的消息是有顺序的,不同消息队列收到的消息则可能是无顺序的。
 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读