概述
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服务,提供主代理和从代理之间的数据同步功能。
- 索引服务,按指定密钥构建消息索引,并提供快速消息查询。
网友评论