概述
Apache RocketMQ是一个低延时、高性能、可靠的分布式消息流平台,它具有兆级容量和灵活扩展性的特点。它包括四个部分:name servers, brokers, producers and consumers。每个部分都能水平扩展以避免单点故障。
image.png
Name Server 集群
Name Servers 提供轻量级的服务发现和路由功能。每个Name Server记录全部的路由信息,提供相应的读写服务,支持快速存储扩展。
Broker 集群
Broker 集群通过TOPIC和QUEUE机制实现消息存储功能。Broker支持Push和Pull两种模式,容错机制(2到3个备份),和短时间内应对成百上千亿消息的强大的削峰填谷功能。另外,Broker还支持灾难恢复,丰富的统计指标等等一系列在传统消息系统中缺乏的可选机制。
Producer 集群
Producer支持分布式部署。分布式的Producers通过多路负载均衡模式向Broker集群发送消息。发送程序支持快速失败和低延时。
Consumer 集群
Consumer同样支持分布式部署,而且支持Push和Pull两种模式。它还支持集群消费和消息广播。同时提供实时消息订阅以满足更多消费需求。
push: Broker向Consumer推送消息,有可能将消费者压垮
pull: Consumer主动向Broker拉取消息
Name Server
Name Server是一个功能完备的服务器,它只要有两个功能:
- Broker 管理。Name Server接收Broker集群注册,并且提供心跳机制检测Broker是否存活。
- 路由管理。每个Name Server都有完整的Broker路由信息和队列信息,供客户端查询
众所周知,RocketMQ的客户端(Producer/Consumer)在Name Server上查询队列路由信息,但是客户端怎么发现Name Server地址呢?
以下有四种方式:
- 编程方式,像
producer.setNamesrvAddr("ip:port")
- java 参数,用
rocketmq.namesrv.addr
- 环境变量,用
NAMESRV_ADDR
- HTTP 接口
更多详情请点击这里.
Broker Server
Broker 负责消息的存储、分发、查询以及高可用保证(防丢)等等。
Broker有以下几个重要模块:
- 远程模块,broker的入口,处理客户端请求
- 客户端管理,管理客户端和维持Consumer Topic订阅
- 存储服务,提供简单的API落地消息以及从磁盘查询数据
- 高可用服务(HA),在Broker Server之前同步数据
- 索引服务,通过特殊key给消息建立索引,提供快速的消息查询。
网友评论