RocketMQ四大核心组成部分:NameServerBrokerProducer以及Consumer四部分;


各组件通讯

  1. Broker与Name Server集群中的所有节点建立长连接;
  2. Producer与Name Server集群中的其中一个节点(随机选择)建立长连接;
  3. Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接;

Tip:我们可以看到RocketMQ啥都是集群部署的,这是他吞吐量大高可用的原因之一,集群的模式也很花哨,可以支持多master 模式、多master多slave异步复制模式、多 master多slave同步双写模式。

一、NameServer

主要负责对于源数据的管理,包括了对于Topic和路由信息的管理。

NameServer是一个功能齐全的服务器,其角色类似Dubbo中的Zookeeper,但NameServer与Zookeeper相比更轻量。主要是因为每个NameServer节点互相之间是独立的,没有任何信息交互。

NameServer压力不会太大,平时主要开销是在维持心跳和提供Topic-Broker的关系数据。

NameServer 被设计成几乎无状态的,可以横向扩展,节点之间相互之间无通信,通过部署多台机器来标记自己是一个伪集群。

每个 Broker 在启动的时候会到 NameServer 注册,Producer 在发送消息前会根据 Topic 到 NameServer 获取到 Broker 的路由信息,Consumer 也会定时获取 Topic 的路由信息。

所以从功能上看NameServer应该是和 ZooKeeper 差不多,据说 RocketMQ 的早期版本确实是使用的 ZooKeeper ,后来改为了自己实现的 NameServer 。

二、Broker

消息中转角色,负责存储消息,转发消息。

1、部署架构

Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master与Slave的对应关系通过指定相同的Broker Name,不同的Broker Id来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。

2、Broker与Name Server

Broker是具体提供业务的服务器,单个Broker节点与所有的NameServer节点保持长连接及心跳,并会定时将Topic信息注册到NameServer,顺带一提底层的通信和连接都是基于Netty实现的。

重点:每个Broker与Name Server集群中的所有节点建立长连接,定时(每隔30s)注册Topic信息到所有Name Server。Name Server定时(每隔10s)扫描所有存活broker的连接,如果Name Server超过2分钟没有收到心跳,则Name Server断开与Broker的连接。

3、心跳

但有一点需要注意,Broker向NameServer发心跳时, 会带上当前自己所负责的所有Topic信息,如果Topic个数太多(万级别),会导致一次心跳中,就Topic的数据就几十M,网络情况差的话, 网络传输失败,心跳失败,导致NameServer误认为Broker心跳失败。

4、消息存储

Broker负责消息存储,以Topic为纬度支持轻量级的队列,单机可以支撑上万队列规模,支持消息推拉模型。

官网上有数据显示:具有上亿级消息堆积能力,同时可严格保证消息的有序性

三、Producer

消息生产者,负责产生消息,一般由业务系统负责产生消息。

1、Producer部署

Producer由用户进行分布式部署,消息由Producer通过多种负载均衡模式发送到Broker集群,发送低延时,支持快速失败。

重点:Producer与Name Server集群中的其中一个节点(随机选择)建立长连接。定期从Name Server获取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。

2、Producer与Name Server

Producer 每隔30s(由ClientConfig的pollNameServerInterval)从Name Server获取所有topic队列的最新情况,这意味着如果Broker不可用,Producer最多30s能够感知,在此期间内发往Broker的所有消息都会失败。

3、Producer与Broker

Producer 每隔30s(由ClientConfig中heartbeatBrokerInterval决定)向所有关联的Broker发送心跳,Broker每隔10s中扫描所有存活的连接,如果Broker在2分钟内没有收到心跳数据,则关闭与Producer的连接。

4、消息发送方式

RocketMQ 提供了三种方式发送消息:同步、异步和单向

同步发送:同步发送指消息发送方发出数据后会在收到接收方发回响应之后才发下一个数据包。一般用于重要通知消息,例如重要通知邮件、营销短信。

异步发送:异步发送指发送方发出数据后,不等接收方发回响应,接着发送下个数据包,一般用于可能链路耗时较长而对响应时间敏感的业务场景,例如用户视频上传后通知启动转码服务。

单向发送:单向发送是指只负责发送消息而不等待服务器回应且没有回调函数触发,适用于某些耗时非常短但对可靠性要求并不高的场景,例如日志收集。

四、Consumer

消息消费者,负责消费消息,一般是后台系统负责异步消费。

1、Consumer与Name Server

重点:Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接。定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。

Consumer每隔30s从Name server获取topic的最新队列情况,这意味着Broker不可用时,Consumer最多最需要30s才能感知。

2、Consumer与Broker

Consumer每隔30s(由ClientConfig中heartbeatBrokerInterval决定)向所有关联的broker发送心跳,Broker每隔10s扫描所有存活的连接,若某个连接2分钟内没有发送心跳数据,则关闭连接;

并向该Consumer Group的所有Consumer发出通知,Group内的Consumer重新分配队列,然后继续消费。

当Consumer得到master宕机通知后,转向slave消费,slave不能保证master的消息100%都同步过来了,因此会有少量的消息丢失。但是一旦master恢复,未同步过去的消息会被最终消费掉。

3、消息消费

Consumer也由用户部署,支持PUSH和PULL两种消费模式,支持集群消费广播消息,提供实时的消息订阅机制

Pull:拉取型消费者(Pull Consumer)主动从消息服务器拉取信息,只要批量拉取到消息,用户应用就会启动消费过程,所以 Pull 称为主动消费型。

Push:推送型消费者(Push Consumer)封装了消息的拉取、消费进度和其他的内部维护工作,将消息到达时执行的回调接口留给用户应用程序来实现。所以 Push 称为被动消费类型,但从实现上看还是从消息服务器中拉取消息,不同于 Pull 的是 Push 首先要注册消费监听器,当监听器处触发后才开始消费消息。

五、RocketMQ核心模块

  • rocketmq-broker:接受生产者发来的消息并存储(通过调用rocketmq-store),消费者从这里取得消息
  • rocketmq-client:提供发送、接受消息的客户端API。
  • rocketmq-namesrv:NameServer,类似于Zookeeper,这里保存着消息的TopicName,队列等运行时的元信息。
  • rocketmq-common:通用的一些类,方法,数据结构等。
  • rocketmq-remoting:基于Netty4的client/server + fastjson序列化 + 自定义二进制协议。
  • rocketmq-store:消息、索引存储等。
  • rocketmq-filtersrv:消息过滤器Server,需要注意的是,要实现这种过滤,需要上传代码到MQ!(一般而言,我们利用Tag足以满足大部分的过滤需求,如果更灵活更复杂的过滤需求,可以考虑filtersrv组件)。
  • rocketmq-tools:命令行工具。

RocketMQ集群部署结构相关推荐

  1. RocketMQ集群部署记录

    RocketMQ集群部署记录 #引用    https://cloud.tencent.com/developer/article/1147765 一.RocketMQ基础知识介绍 Apache Ro ...

  2. Centos6下RocketMQ集群部署记录

    一.RocketMQ基础知识介绍 Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...

  3. RocketMQ集群部署方案(DLedger)

    RocketMQ集群部署方案(DLedger) 一.基本配置 1.准备三台虚拟机,root密码 root ;IP地址: 192.168.xxx.xxx worker1 192.168.xxx.xxx ...

  4. (三)RocketMQ集群部署实践

    2019独角兽企业重金招聘Python工程师标准>>> 全篇参照–<MyRocketMQ集群部署实战-双master-双slave-同步双写-异步刷盘(7台机器) - tant ...

  5. 从生产故障解锁RocketMQ集群部署的最佳实践

    1.故障描述 RocketMQ 集群采取的部署架构为2主2从,其部署架构如下图所示: 其部署架构中一个非常明显的特点是一台物理机上分别部署了 nameserver,broker 两个进程. 其中一台机 ...

  6. 从年末生产故障解锁RocketMQ集群部署的最佳实践

    [CSDN 编者按]因为一次生产事故,导致年终奖泡汤!在一番问题查找之后,终于找到了罪魁祸首!MQ集群中某一台物理机内存引发的故障,从而导致系统异常重启,而更关键的问题是,为什么一台Broker由于内 ...

  7. rocketmq 集群部署

    架构图 部署环境 hostname ip 备注 mqnamesrv1 10.0.0.1 namesrv mqnamesrv2 10.0.0.2 namesrv mqbroker3 10.0.0.3 b ...

  8. RocketMQ集群部署

    RocketMQ是一款非常优秀的消息中间件,运用的场景也是非常丰富,且在各大公司运用中也非常广泛.但是它是如何进行部署的呢,以及它的高可用是如何实现的呢.那么就由我来为大家讲解一哈RocketMQ是如 ...

  9. RocketMQ 简单梳理 及 集群部署笔记【转】

    一.RocketMQ 基础知识介绍 Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ ...

最新文章

  1. sql server 数据库模型 备份 恢复 总结 备份脚本
  2. jstatd - Virtual Machine jstat Daemon
  3. 自学MVC——添加一个控制器
  4. 后端技术:MyBatis 知识点整理,值得收藏!
  5. Shell判断参数是否为数字的6种方法(是否为整形)
  6. 时间对象与字符串对象之间相互转换
  7. 2019年第四次课程设计实验报告
  8. 『vulnhub系列』dpwwn-1—Linux计划任务提权
  9. 电脑可以连接手机热点,却无法连路由器无线wifi
  10. DFS走迷宫(懒猫老师C++完整版)
  11. 微软文本转语音实测记录附php/go调用源码
  12. Python中while循环练习——打印星星总结
  13. 陌生人邀请我加入CS:GO游戏,我一接受就被盗号了
  14. java%3c%3e符号,有趣的 JavaScript 格式转换
  15. java urlrewrite
  16. 【华为校招】【校招】【Java】单词搜索(DFS)
  17. Executors 源码解析(JDK8)
  18. matlab从大到小排序的语句,从小到大排序的方法
  19. VB.net:VB.net编程语言学习之添加引用打包安装项目的简介、案例应用之详细攻略
  20. 大型ICP正在重新激活海底光缆市场 2022年收入将超14亿美元

热门文章

  1. 信息流广告ROI线性预测看板投放分析监控看板展示数据处理入库全流程
  2. php imagick 取得psd缩略图,php imagick 获取psd图层信息
  3. 配置无线打印路由器(暂存)
  4. Android语音播报、后台播报、语音识别,android面试知识点
  5. 写一份自动售票机各模块的测试用例
  6. 静态网站下载工具一(主要代码)
  7. Vue仿网易云音乐播放器(一)
  8. 快速幂、快速乘、矩阵快速幂
  9. ICMP协议及其抓包分析
  10. JSP的本质是什么?