RocketMQ Practice – Architecture Learn

Apache RocketMQ 是一个分布式消息及流处理平台,具有低延迟、高性能和可靠性,以及万亿级容量和灵活的扩展性。

体系架构

image

RocketMQ 主要包含 4 部分,它们中的每一部分都可以在非单点失败的情况下进行水平扩展。

  • NameServers
  • Brokers
  • Producers
  • Consumers

NameServer Cluster(命名服务集群)

NameServers 提供发现和路由的轻量级服务。集群中每个 NameServer 记录完整的路由信息,提供相应的读写服务,支持快速存储扩展。

NameServer(命名服务)

NameServer 是一个功能齐全的服务,主要包含以下 2 个特性:

  • Broker 管理

    NameServer 接受来自 Broker 集群的注册,并提供监测 Broker 是否存活的心跳机制。

  • 路由管理

    每个 NameServer 保存 Broker集群的整个路由信息以及客户端查询的队列信息。

正如我们所知,RocketMQ 客户端(Producer & Consumer)通过 NameServer 获取队列路由信息,但客户端是如何知道 NameServer 地址的呢?获取 NameServer 地址列表的 4 种方式:

  • 编写程序 producer.setNamesrvAddr("ip:port")
  • Java 选项 rocketmq.namesrv.addr
  • 环境变量 NAMESRV_ADDR
  • HTTP 端点

Broker Cluster(代理集群)

Brokers 通过轻量级的 TOPIC 和 QUEUE 机制满足消息存储。他们支持 Push 和 Pull 两种模式,包含容错机制(拷贝2-3份),并提供了强大的填补高峰和积累数以百亿计的消息在其原来的时间顺序的能力(这句没看懂) 。此外,Brokers 也提供灾难恢复,丰富的指标统计和预警机制。

Broker Server(代理服务)

Broker Server 负责消息的存储、交付、消息查询与 HA 保证等。

image

Broker Server 重要的子模块:

  • 远程模块 - Broker 入口,处理来自客户端的请求。
  • 客户端管理 - 管理客户端(Producer & Consumer)和维护消费者的主题订阅。
  • 存储服务 - 提供简单的API来存储或查询物理磁盘中的消息。
  • HA 服务 - 提供主从 Broker 间的数据同步功能。
  • 索引服务 - 按指定的键为消息建立索引,并提供快速的消息查询。

Producer Cluster(生产者集群)

Producers 支持分布式部署。分布式 Producers 通过负载均衡模型向 Brokers 集群发送消息,发送过程支持快速失败及低延迟。

Consumer Cluster(消费者集群)

Consumers 在 Push 和 Pull 两种模式下支持分布式部署。它也支持集群消费和消息广播。它提供实时的消息订阅机制,可以满足大多数消费者的需求。


更多信息请参考官方:https://rocketmq.apache.org/