二、RocketMQ架构介绍

image

概述

Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性,万亿级容量和灵活的可扩展性。它由四部分组成:NameServer,broker,producer和consumer。它们中的每一个都可以水平扩展从而避免单一机体故障导致的消息出校问题。如上面的截图所示。

NameServer Cluster

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

Broker Cluster

Broker 通过提供轻量级的TOPIC和QUEUE机制来处理消息存储。它们支持Push和Pull模型,包含容错机制(2个副本或3个副本),并提供强大的峰值填充和按原始时间顺序累积数千亿条消息的能力。此外,Brokers还提供灾难恢复,丰富的指标统计和警报机制,所有这些都缺乏传统的消息传递系统。

Producer Cluster

Producer 支持分布式部署。Distributed Producers通过多种负载均衡模式向Broker集群发送消息。发送过程支持快速故障并具有低延迟。

Consumer Cluster

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

NameServer

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

  • Broker Management,NameServer接受来自Broker集群的寄存器,并提供心跳机制来检查Broker是否存活。
  • 路由管理,每个NameServer将保存有关Broker群集的整个路由信息和客户端查询的队列信息。

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

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

  • 程序化方式,如producer.setNamesrvAddr("ip:port")
  • Java选项,使用rocketmq.namesrv.addr
  • 环境变量,使用NAMESRV_ADDR
  • HTTP端点。

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

Broker Server

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

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

  • 远程处理模块,即代理的条目,处理来自client的请求。
  • client manager,管理client(生产者/消费者)并维护消费者的主题订阅。
  • Store Service,提供简单的API来存储或查询物理磁盘中的消息。
  • HA服务,提供主代理和从代理之间的数据同步功能。
  • 索引服务,按指定密钥构建消息索引,并提供快速消息查询。
image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容