zl程序教程

您现在的位置是:首页 >  其他

当前栏目

RocketMQ: 技术架构与启动流程

流程技术架构 启动 rocketmq
2023-06-13 09:15:45 时间

技术架构

主要分为四部分:

  • Producer: 消息的生产者. 支持快速失败并且低延迟.
  • Consumer: 消息的消费者. 支持push/pull 两种模式对消息消费. 支持集群消费和广播消费.
  • NameServer: 两个功能: (1) Broker管理, 接收Broker集群的注册信息并保存下来, 提供心跳机制; (2) 路由信息管理, Producer和 Consumer 通过NameServer 获取Broker集群的路由信息, 进行投递和消费;
  • BrokerServer: 负责消息的存储 / 投递 / 和查询. 包含以下几个重要模块: (1) Remoting Module: 负责处理来自Client端的请求; (2) Client Manager: 负责管理客户端(Producer/Consumer)和维护Consumer的Topic订阅信息; (3) Store Serivce: 提供API接口处理消息存储到物理硬盘和查询功能; (4) HA Service: 高可用服务, 提供Master 和 Slave 之间的数据同步功能; (5) Index Service: 根据Message Key对投递到Broker 的消息进行索引服务, 提供消息的快速查询;

部署架构

  • NameServer: 无状态节点, 可集群部署, 节点之间无信息同步;
  • Broker: 分为Master和Slave, 每个Broker与NameServer集群中的所有节点建立长连接, 定时注册Topic信息到所有的NameServer.
  • Producer: 与NameServer集群中的其中一个节点(随机选择) 建立长连接, 定期从NameServer获取Topic路由信息, 并向提供Topic服务的Master建立长连接, 且定时向Master发送心跳;
  • Consumer: 与NameServer 集群中的其中一个节点(随机选择) 建立长连接, 建立长连接, 定期从NameServer获取Topic路由信息, 并向提供Topic服务的Master Slave建立长连接, 且定时向Master slave发送心跳; Consumber 既可以从Master订阅消息, 也可以从Slave订阅消息;

工作流程

  1. 启动NameServer, NameServer启动后监听端口, 等待Broker/ Producer/ Consumer 连接;
  2. Broker启动, 然后与NameServer保持长连接, 定时发送心跳包. 心跳包包括当前Broker的IP和端口以及存储的所有Topic信息; 然后NameServer就有Topic和Broker的映射关系;
  3. Producer启动时先和NameServer建立长连接, 然后从NameServer中获取当前Topic存在哪些Broker, 轮询从队列中选择一个队列, 然后与Broker建立长连接从而向Broker发送消息;
  4. Consumer 和其中一台NameServer建立长连接, 获取当前Topic存在哪些Broker上, 与Broker建立长连接, 开始消费消息;