概述
RocketMQ是一个分布式消息和流处理平台,具有低延迟、高性能和高可靠、万亿级容量和灵活的可扩展性。它由四部分组成:name servers,brokers,生产者和消费者。它们中的每一个都可以水平扩展,而没有单一的故障节点。
NameServer 集群
Name Servers提供了轻量级的服务发现和路由。每个Name Server记录全部的路由信息,提供相应的读和写服务,并支持快速存储扩展。
Broker 集群
Brokers通过轻量级的TOPIC和QUEUE机制处理消息存储。支持Push和Pull模式,包含故障容忍机制(2或3份),提供强大的峰值填充和以原始时间顺序累积千亿条消息的能力。
另外,Brokers提供灾难恢复,丰富的度量统计和警告机制,这些都是传统消息系统缺少的。
生产者集群
生产者支持分布式部署。分布式生产者通过多种负载均衡模式发送消息到Broker集群,发送过程支持快速故障并具有低延迟。
消费者集群
消费者也支持以Push和Pull模式的分布式部署。
它也支持分布式消费和消息广播。
它提供实时消息订阅机制,可以满足大部分消费者的需求。
NameServer
NameServer is a fully functional server, which mainly includes two features:
- Broker 管理,NameServer 接收来自Broker集群的注册,提供心跳机制来检测broker是否存活。
- 路由管理,每个NameServer都持有有关broker集群的整个路由信息和客户端查询的队列信息。
我们都指定,RocketMQ客户端(生产者/消费组)通过NameServer查询队列信息,但客户端怎么查找NameServer 地址呢?
将客户端地址列表加入NameServer有四种方式:
- 编码方式,如producer.setNamesrvAddr("ip:port")。
- Java选项, 使用 rocketmq.namesrv.addr.
- 环境变量, 使用 NAMESRV_ADDR.
- HTTP Endpoint.
Broker Server
Broker服务 负责消息存储和传递,消息查询,保证HA等。
Broker 服务有些重要的子模块:
- 远程处理模块,broker的入口,处理来自客户端的请求。
- 客户端管理器,管理客户端(生产者/消费者),维护消费组的订阅主题。
- 存储服务,提供简单的APIs来存储或查询物理磁盘中的消息。
- HA 服务, 提供主broker和从broker的数据同步
- 索引服务, 通过指定键建立消息索引,提供快速的消息查询。