【消息队列】MQ进阶篇之 RocketMQ 的理论

发布时间:2024年01月17日

一、Apache RocketMQ 部署架构

主要分为四部分:

1、生产者 Producer

发布消息的角色。Producer通过 MQ 的负载均衡模块选择相应的 Broker 集群队列进行消息投递,投递的过程支持快速失败和重试。

2、消费者 Consumer

消息消费的角色。

  • 支持以推(push),拉(pull)两种模式对消息进行消费。
  • 同时也支持集群方式和广播方式的消费。
  • 提供实时消息订阅机制,可以满足大多数用户的需求。

3、名字服务器 NameServer

NameServer(Name Server)是 RocketMQ 分布式架构中的一个关键组件。NameServer 的主要作用是管理整个 RocketMQ 集群的元数据信息,包括 T o p i c \color{Green}Topic Topic B r o k e r \color{Green}Broker Broker Q u e u e \color{Green}Queue Queue 等信息,最主要的是管理 Broker 和 路由信息。以下是 NameServer 的主要功能和作用:

  • Broker 注册: 当一个 Broker 启动时,它会向 NameServer 注册自己的信息,包括 Broker 的名称、地址、版本等。NameServer 将这些信息保存下来,用于后续的路由查找。Broker 是存储消息Topic的 代理服务器,是实际部署过程对应的代理服务器。
  • Topic 路由: 当生产者发送消息或消费者订阅消息时,NameServer 负责为相应的 Topic 提供路由信息。路由信息包括哪些 Broker 拥有该 Topic 的消息队列,以及这些队列的数量。每个NameServer将保存关于 Broker 集群的整个路由信息和用于客户端查询的队列信息。Producer和Consumer通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常会有多个实例部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。
  • 负载均衡: NameServer 负责监控 Broker 的状态,并提供负载均衡。它可以检测 Broker 的上线和下线,以及负载的情况,从而为生产者和消费者提供最优的路由信息。
  • 心跳检测: NameServer 通过定期的心跳检测来保持与 Broker 的连接状态。如果某个 Broker 长时间未响应,NameServer 将移除该 Broker 的注册信息,确保系统的稳定性。
  • 提供查询服务: 开发者可以通过查询 NameServer 来获取整个 RocketMQ 集群的状态信息,包括各个 Broker 的信息、Topic 路由信息等。

在 RocketMQ 集群中,通常有多个 NameServer 以提供高可用性。生产者和消费者通过连接任意一个可用的 NameServer 来获取集群的路由信息。这种设计保证了系统的稳定性和可扩展性。

总体而言,NameServer 在 RocketMQ 中充当了集群元数据管理和路由分发的重要角色,确保消息在集群中的顺利传递和负载均衡。

4、代理服务器 Broker

在 Apache RocketMQ 中,代理服务器通常被称为 Broker。RocketMQ Broker 是整个消息队列系统中的核心组件,负责接收、存储和传递消息。扮演了消息的中转站和存储库的重要角色。以下是 RocketMQ Broker 的主要功能和特点:

  • 消息存储: Broker 负责将生产者发送的消息存储在持久化存储(如磁盘)中,以确保消息在需要时能够被消费者获取。
  • 消息传递: Broker 负责将存储在持久化存储中的消息传递给相应的消费者。消息的传递可以是点对点传递,也可以是发布/订阅模式下的广播传递。
  • 消息路由: Broker 管理主题(Topic)和队列(Queue)之间的消息路由,确保消息能够被正确地传递到目标队列。
  • 负载均衡: RocketMQ 支持多个 Broker 组成的集群,Broker 之间可以进行负载均衡,以提高系统的吞吐量和可用性。
  • 可靠性和持久性: Broker 提供机制来确保消息的可靠性传递,并可以配置消息的持久性,以防止数据丢失。
  • 集群管理: 在 RocketMQ 中,Broker 通过 Namesrv(Name
    Server)注册自己的信息,实现集群的管理。Namesrv 负责为生产者和消费者提供路由信息。
  • 高可用性: RocketMQ 支持主从复制,即每个主题的队列都可以有多个副本,确保在某个 Broker 宕机时消息仍然可用。

RocketMQ 中的 Broker 有两个主要角色:Master(主节点)Slave(从节点)。Master 负责处理写入消息的操作,而 Slave 负责从 Master 复制消息,以保持数据一致性。当 Master 节点发生故障时,系统可以自动或手动切换到 Slave 节点,提高系统的可用性。

在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master 与 Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId 来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。

每个 Broker 与 NameServer 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 NameServer。
·
Producer 与 NameServer 集群中的其中一个节点建立长连接,定期从NameServer 获取Topic路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。Producer 完全无状态。
·
Consumer 与 NameServer 集群中的其中一个节点建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时向 Master、Slave发送心跳。Consumer 既可以从 Master 订阅消息,也可以从 Slave 订阅消息。

持续更新中。。。

文章来源:https://blog.csdn.net/weixin_45188218/article/details/135655429
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。