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 配置决定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值