开发学院

您的位置:首页>教程>正文

教程正文

RocketMQ 体系结构

概观

  Apache RocketMQ是一个分布式消息和流平台,具有低延迟、高性能和可靠性、万亿级容量和灵活的可扩展性。它由四部分组成:NameServer、Broker、Producer和Consumer。它们中的每一个都可以在没有单点故障的情况下水平延伸。如上面截图所示。

NameServer集群

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

Broker群集

  Broker通过提供轻量级主题和队列机制来处理消息存储。它们支持推和拉模型,包含容错机制( 2份或3份),并提供峰值的强填充,以及按原始时间顺序累积数千亿条消息的能力。此外,Broker提供灾难恢复、丰富的度量统计数据和警报机制,这些都是传统消息传递系统所缺乏的。

Producer集群

  Producer支持分布式部署。分布式生成器通过多种负载平衡模式向代理集群发送消息。发送过程支持快速故障,并且具有低延迟。

Consumer集群

  Consumer也支持推拉模型中的分布式部署。它还支持集群消费和消息广播。它提供实时消息订阅机制,可以满足大多数Consumer的需求。

NameServer

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

  代理管理,NameServer接受来自代理集群的注册,并提供心跳机制来检查代理是否有效。

  路由管理,每个NameServer将保存有关Broker群集的整个路由信息和客户端查询的队列信息。

  众所周知,RocketMQ客户端(生产者/消费者)会从NameServer查询队列路由信息,但是客户端如何找到NameServer地址?

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

  编程方式,比如producer.setNamesrvAddr("ip:port").

  Java选项,使用rocketmq.namesrv.addr.

  环境变量,使用NAMESRV_ADDR.

  HTTP节点。

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

Broker

  Broker服务器负责消息存储和传递、消息查询、HA保证等。

如下图所示,Broker服务器有几个重要的子模块:

  远程处理模块,代理的入口,处理来自客户端的请求。

  客户端管理器,管理客户端(生产者/消费者)并维护消费者的主题订阅。

  存储服务,提供简单的API来存储或查询物理磁盘中的消息。

  HA服务,提供主代理和从代理之间的数据同步功能。

  索引服务,按指定键为消息建立索引,并提供快速消息查询。