RocketMQ 架构

概览

Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性,数十亿容量和灵活的可扩展性。 它由四部分组成:名字服务器,经纪人,生产者和消费者。 它们中的每一个都可以在没有单一故障点的情况下水平延伸。 如上面的截图所示。

NameServer 集群

名称服务器(NameServer )提供轻量级服务发现和路由。 每个Name Server记录完整的路由信息,提供相应的读写服务,支持快速存储扩展。

Broker 集群

经纪商通过提供轻量级的TOPIC和QUEUE机制来照顾消息存储。 它们支持Push和Pull模式,包含容错机制(2个拷贝或3个拷贝),并且提供强大的峰值填充和以原始时间顺序累积数千亿条消息的能力。 此外,经纪商还提供灾难恢复,丰富的指标统计数据和警报机制,而传统的消息传递系统都缺乏这些机制。

Producer 集群

生产者支持分布式部署。 分布式生产者通过多种负载均衡模式向Broker集群发送消息。 发送过程支持快速失败并具有低延迟。

Consumer 集群

消费者也支持Push和Pull模型中的分布式部署。 它还支持群集消费和消息广播。 它提供了实时的消息订阅机制,可以满足大多数消费者的需求。 RocketMQ的网站为感兴趣的用户提供简单的快速入门指南。

NameServer

NameServer是一个功能齐全的服务器,主要包括两个功能:

  • Broker管理,NameServer接受来自Broker集群的注册,并提供检测代理是否存在的心跳机制。
  • 路由管理,每个NameServer将保存有关代理群集的全部路由信息以及客户端查询的队列信息。

我们知道,RocketMQ客户端(生产者/消费者)将从NameServer查询队列路由信息,但客户端如何找到NameServer地址?

将NameServer地址列表提供给客户端有四种方法:

  • 编程 方式,比如producer.setNamesrvAddr("ip:port");
  • Java Options, 使用 rocketmq.namesrv.addr
  • 环境变量,使用NAMESRV_ADDR
  • HTTP 端点

有关如何查找NameServer地址的更多详细信息,请参阅此处

Broker Server

代理服务器负责消息存储和交付,消息查询,HA保证等。

如下图所示,Broker服务器搜索重要的子模块:

  • 远程处理模块是经纪人的入口,处理来自客户的请求。
  • 客户端管理,管理客户端(生产者/消费者)并维护消费者的主题订阅。
  • Store Service,提供简单的API来存储或查询物理磁盘中的消息。
  • HA服务,提供主代理和从代理之间的数据同步功能。
  • 索引服务,通过指定键为消息建立索引,并提供快速的消息查询。

results matching ""

    No results matching ""