RocketMQ学习笔记【二】RocketMQ架构简介

二、RocketMQ架构

 

                                                                                     图片来自官网

       如上图所示:Apache RocketMQ是一个分布式消息和流媒体平台,具有低延迟、高性能和可靠性、万亿级容量和灵活的可扩展性。它由四个部分组成:NameSever(名称服务器)、Broker(代理)、Producer(生产者)和Consumer消费者。它们中的每一个都可以水平扩展,以避免单节点部署带来的单点故障服务不可用问题。这里还可以看到在Broker集群采用的是Master/Slave架构,这种架构跟Kafka中Broker Cluster的Leader/Follower架构是有很大不同的,Kafka中的Leader和Follower更像是逻辑概念(每个Broker是消息A的Leader同时又是消息B的Follower),而RocketMQ中的Master和Slave是区分明确的,当一个Master挂了之后,你可以写到其他Master上,但不会把Slave切换成Master。所以Kakfa里面Leader挂掉之后有选举的Leader的过程(依赖Zookeeper实现,把一个Follower升级成Leader),而Rocket MQ是不需要的。

2.1 NameServer Cluster

       NameServer Cluster提供轻量级服务发现和路由。每个NameServer记录完整的路由信息,是一个几乎无状态节点,支持快速的存储扩展,可集群部署,主要包括两个功能:

(1)Broker管理:NameSever接受Broker集群的注册信息,并提供心跳机制来检查某个Broker是否仍存活。

(2)路由管理:每个NameServer将保存有关Broker集群的完整路由信息和用于Client端查询的Queue信息。

       正如我们所知,RocketMQ 客户端集群(生产者/消费者)将从NameServer查询Queue队列路由信息,但是Client如何找到NameServer的地址呢?

向Client集群提供名称服务器地址列表有四种方法:

(1)编程方式,如producer.setnamesrvaddr(“ip:port”)。

(2)Java选项,使用RokMeq.NAMESRV.ADDR。

(3)环境变量,使用名称srv_addr。

(4)HTTP端点。

以上四种方式具体实现细节:http://rocketmq.apache.org/rocketmq/four-methods-to-feed-name-server-address-list/

2.2 Broker Cluster

       Brokers集群通过提供轻量级的Topic(主题)和Queue(队列)来处理消息存储。它们支持Push/Pull模型,包含容错机制(2个副本或3个副本),并提供按原始时间顺序存储数千亿条峰值消息的容量。此外,Broker还提供灾备恢复、丰富的统计数据和告警机制等功能,这些都是传统消息中间件所缺少的。Broker是消息中转角色,负责存储消息,转发消息。分为 Master Broker 和 Slave Broker,一个 Master Broker 可以对应多个 Slave Broker,但是一个 Slave Broker 只能对应一个 Master Broker。Broker 启动后需要完成一次将自己注册至 Name Server 的操作。

       Broker负责消息存储和传递、消息查询、HA保证(HA guarantee)等。

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

(1)远程处理模块:是Broker的入口,处理来自Client端的请求。

(2)Client管理模块,管理Client(生产者/消费者)并维护Comsumer和Topic 的订阅关系。

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

(4)HA服务,在Master Broker和Slave Broker之间提供数据同步功能。

(5)索引服务,通过指定的键为消息建立索引,并提供快速消息查询。

2.3 Producer Cluster

       Producer(生产者)支持分布式部署。生产者集群通过多种负载平衡模式向Broker 集群发送消息。发送消息支持快速失败同时保持低延迟。Producer与 Name Server 集群中的其中一个节点(随机)建立长链接(Keep-alive),定期从 Name Server 读取 Topic 路由信息,并向提供 Topic 服务的 Master Broker 建立长链接,且定时向 Master Broker 发送心跳。

2.4 Consumer Cluster

       Consumer(消费者)也支持分布式部署,支持Pull/Push两种消息消费模式。它还支持集群消费和消息广播。它提供了实时消息订阅机制,可以满足大多数用户的需求。RocketMQ的网站为感兴趣的用户提供了一个简单的快速入门指南。Consumer 与 Name Server 集群中的其中一个节点(随机)建立长连接,定期从 Name Server 拉取 Topic 路由信息,并向提供 Topic 服务的 Master Broker、Slave Broker 建立长连接,且定时向 Master Broker、Slave Broker 发送心跳。Consumer 既可以从 Master Broker 订阅消息,也可以从 Slave Broker 订阅消息,订阅规则由 Broker 配置决定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章