RocketMQ快速入门:namesrv、broker、dashboard的作用及消息发送、消费流程(三)

0. 引言

接触rocketmq之后,大家首当其冲的就会发现需要安装3个组件:namesrv, broker, dashboard,其中dashboard也叫console,为选装。而这几个组件之前的关系是什么呢,消息发送和接收的过程是如何传递的呢,这是我们要详细了解的。

1. rocketmq组件架构

rocketmq实际上一共由4个部分组成:namesrv, broker, 生产者, 消费者

而dashboard则是作为单独的管理端存在,目前是为了方便管理、查看队列、topic、集群的情况。所以我们重点放在namesrv, broker的理解上。

image-20240308170213377

1.1 namesrv的作用

namesrv 实际上的一个核心作用就是充当一个注册中心,相当于zookeeper的作用,但是比zookeeper更加轻量,负责broker、路由信息的管理。

namesrv可以部署集群模式,但每个节点都相互独立,并不进行通信,所以也就意味着namesrv每个节点都会存储全量的路由数据,而broker也会向每个namesrv发送注册信息。

broker会每30s向namesrv发送一次心跳包,用于注册和更新自己的路由信息,同时namesrv会与broker保持长连接,每10s发送一次心跳检测,检测broker是否还存活,如果超120s没有响应,则会将该节点剔除。

image-20240308174803339

1.2 broker的作用

broker实际上才是rocketmq的业务处理者,主要负责消息的存储、传递、查询、高可用等。
在这里插入图片描述

broker中主要包含以下几个核心模块:

  • Remoting Moudle 远程控制模块:整个 Broker 的实体,负责处理来自客户端的请求

  • Client Manager 客户端管理器:负责管理客户端(生产者、消费者)和维护消费者的主题订阅信息

  • Store Service:提供 API 接口,用以处理消息存储到物理硬盘和查询功能

  • HA Service:高可用服务,提供 Master Broker 和 Slave Broker 之间的数据同步功能

  • Index Service:根据特定的 Message Key 对投递到 Broker 的消息进行索引服务,以提供消息的快速查询

——该段内容引用于:rocektmq核心知识

2. 消息发送流程

2.1 三种发送模式

RocketMQ支持3种消息发送模式:同步 (sync)、异步(async)、单向(oneway)

  • 同步发送:

指生产者发送消息后,需要等到broker收到消息后才会返回确认结果给生产者的模式。这种模式中生产者会等到broker返回确认结果后才认定发送结束,如果超时未收到结果则认为发送失败。
所以该种模式,更加适合对可靠性要求更高的场景,且顺序消费就需要通过同步发送实现

  • 异步发送:

指生产者发送消息后,不会阻塞等等待broker的确认结果返回了,而是直接返回一个future对象给调用方,生产者会开启一个后台线程异步等待确认结果,最后通过回调函数处理发送结果
这种模式比较明显的好处就是不用阻塞等待,适合对响应时间有要求的场景,同时消息发送的可靠性就降低了,可能会发送失败,这就需要在回调函数中做好补偿操作

  • 单向发送:

单向发送更加简单粗暴,即发送完成后就不管后续的结果了,无论发送成功和失败,只要发出则工作就结束。
因此其发送速度是最快速的,同时也是最不可靠的,适合于边缘日志记录、广播通知等场景

其他消息发送拓展
当然rocketmq也支持发送顺序消息、事务消息、延迟消息、批量发送消息等,这些我们将在后续的文章里介绍

2.2 消息发送流程

消息发送的流程主要分成3步:

1、生产者从本地缓存获取指定topic的路由信息(ip、端口等信息)

2、如果本地缓存没有的话,再访问namesrv,更新路由信息到本地缓存,并返回给生产者

3、生产者根据topic的路由信息发送到指定brocker的对应topic,则完成了消息发送

后续消费者再从topic消费消息即可

在这里插入图片描述
所以这里再次强调,namesrv本身是不参与消息发送的实际工作的,它的作用就是管理broker、topic的路由信息,为消息发送者发送时提供目标地址

3. 消息消费流程

3.1 两种消费模式

rocketmq 支持两种消费模式:集群消费模式和广播消费模式

  • 集群模式:

集群消费模式指的是一条消息仅被同一个消费者组(Consumer Group)中的一个消费者消费(在使用消费者时需要指定一个消费者组名,一个消费者组可以订阅多个Topic),同时所有的消息会被平均分配给每个消费者均匀消费,只是每一次一条消息只会被一个消费者消费。就像我们部署的集群节点,一次请求在负载均衡的作用下,只会交给其中一个节点处理。
该模式适用于对可用性要求较高,则可部署多个消费者,同时要求消息的唯一性,则只能被一个消费者消费的场景

  • 广播模式:

广播模式指一条消息能被同一消费者组下的所有消费者消费,就像广播一些,只要播出,所有人都能听到。
该模式适用于订阅服务等需要全体通知的场景。

3.2 两种消费形式

rocketmq 还提供了两种消息形式:pull 拉取和 push推送

  • pull 拉取形式:

在pull模式中,消费者主动向Broker拉取消息,主动控制什么时候拉取以及每次拉取的数量。
该模式更适用于需要消费者主动控制的场景

  • push 推送形式:

在push模式中,broker主动将消息推送给消费者,消费者不需要再去主动关注消息获取。有消息发送过来后,broker就会将消息推送给消费者。
实际上,rocketmq中并不直接支持push模式,而是通过消费者实时监听topic的形式来实现的。所以实际上也是pull的形式,只不过是通过监听实现不停的pull以此模拟push效果。
该形式更加适合对消费实时性要求较高的场景

3.3 消息消费流程

我们上面说明过rocketmq的push模式实际上也是pull封装实现的,所以其消费流程,我们重点理解pull形式即可。

1、默认情况下,消费者会和一个namesrv保持长连接,如果该namesrv宕机,则自动连接到下一个namesrv,每30s查询topic配置信息并保存到本地缓存,当消费消息时,就会通过本地缓存中的路由信息连接broker。同时消费者每隔30秒会向所有broker发送心跳包,broker以此维护消费者的路由表,该表将作为后续broker做消费者端的负载均衡的依据。

2、消费者启动或者数量发生变化时,会触发消费者端的负载均衡,会根据预设的负载均衡算法来选择队列,然后向broker注册队列绑定,一个topic下会有多个队列,而broker会通过加锁操作来保证一个队列只能被一个消费者绑定。因为广播模式所有的消费者都会收到消息,所以广播模式下没有负载均衡可言,这里的负载均衡主要针对集群模式。

这里需要注意的是:rocketmq的负载均衡实际是通过生产者的负载均衡和消费者的负载均衡共同实现的,生产者负载均衡选择将消息发送到topic下的哪个队列,消费者的负载均衡决定每个消费者绑定消费哪个队列。

3、进行消息消费时,消费者先从本地缓存获取获取topic路由信息,如果本地缓存没有则从namesrv更新一份

4、从本地缓存获取消费进度(即偏移量 offset),本地缓存没有则从broker更新进度到本地缓存

5、根据消费进度拉取最新的消息

6、消费者处理拉取到的消息,处理完成后,向broker发送ACK确认消息已消费

7、消费成功后,消费者会更新自己在broker上的消费进度,以方便下一次消费
在这里插入图片描述

4. dashboard的作用

dashboard 是 RocketMQ 的一款开源控制台管理工具,原为rocketmq仓库下的console模块,后独立出来并重命名为dashboard,它提供了一个可视化的界面来管理和监控 RocketMQ 集群。通过 Dashboard,我们可以更方便地查看集群状态、topic信息、生产者和消费者的运行情况,以及进行消息的查询和操作

总而言之,其是用于rocketmq的监控管理可视化平台,在实际生产中极为重要,可以很大程度简化我们的排查、运维工作。

在这里插入图片描述

5. 总结

到这里我们就了解了rocektmq中的4个组成:消费者、namesrv、broker、生产者以及他们的作用,以及核心的消息生产、发送流程。下一节,我们再针对rocektmq中的group、topic、tag、queue等概念进行讲解,并梳理清楚他们之间的关系,让大家从基础上理解得更加清晰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/2227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Windows 10中打开和自定义搜索?这里提供详细步骤

使用Windows 10中的搜索功能,你可以快速查找计算机上的文件、应用程序或设置。在本文,你可以学习如何在Windows 10中打开和控制搜索。 打开Windows 10搜索面板 打开Windows 10搜索面板很容易。通常,你可以在任务栏上找到搜索图标。只需单击…

如何在PostgreSQL中创建一个新的数据库,并指定所有者?

文章目录 解决方案示例代码 PostgreSQL是一个强大的开源关系型数据库管理系统,它允许用户创建和管理多个数据库。在PostgreSQL中创建一个新的数据库并指定所有者是一个常见的操作。下面,我们将详细解释如何执行这一操作,并提供示例代码。 解…

灭火器检查记录卡模板如何制作

灭火器是常见的消防设备,为确保灭火器正常使用,需要定期对灭火器进行检查和维护;而灭火器检查记录卡就是用来记录灭火器检查的重要工具。然而传统的灭火器检查记录卡都是纸质的,哪怕我们采购多好多贵材质做的检查卡终归记录有限、…

Midjourney如何利用chaos控制生成图片的差异化

hello 小伙伴们,我是你们的老朋友——树下,今天分享Midjourney提示词常用参数——chaos,话不多说,直接开始~ chaos参数什么意思呢? 它可以用来控制我们生成图片之间的差异化程度的一个参数 通常我们在用Midjourney生…

LateX的基础学习

what can i say 在text.tex中写下 \documentclass{article} \begin{document]Hello \LaTeX. \end{document} 关闭记事本,cmd中dir保存,用latex text.tex来编译,可以命令行慢慢编译,这可以做成bat文件 为什么不直接开始在texst…

Java基本语法(基础部分)

Java基本语法 文章目录 Java基本语法前言一、准备工作1.1 计算机软件与硬件1.2 计算机编程语言1.3 Java语言概述&程序分析1.4 Java环境搭建&Java API1.5 Java核心机制JVM 二、变量2.1 关键字&标识符2.2 变量2.3 数据类型(基本数据类型)2.3.1 基本数据类型2.3.2 基本…

Go源码--Strings库

1. 简介 strings库 存储了 一些针对 字符串的具体操作 其 代码短小精悍 可以学习到很多编程的思路 尤其是 涉及到字符串使用性能的方面,其源码库有好多的优秀案例可以学习。向强者对齐不一定成为强者,但向弱者对齐一定变为弱者。 介绍思路是先介绍 stri…

oracle操作系统OS认证和密码文件认证

1 说明 1.1 常见认证方式 Oracle登录认证方式主要涉及到如何验证用户身份以访问数据库。Oracle数据库提供了多种认证机制来确保数据的安全性和访问控制,每种方式都有其特定的使用场景和安全性考虑。以下是Oracle中常见的登录认证方式: 1、基于操作系统…

图像处理技术与应用(一)

图像处理技术与应用入门 使用skimage进行图像读取和显示 skimage库(Scikit-image)提供了一个强大的工具集,用于执行各种图像处理任务。以下是如何使用skimage读取和显示图像的基本示例: from skimage import ioimg io.imread(…

Unpaired Image Super-Resolution using Pseudo-Supervision

CVPR2020解决的问题是当前的SR模型基于成对的数据,且其中LR的图片是通过HR经过bicubic下采样得到的,而实际图片的degradation过程更为复杂,且本文提出的方法不需要成对的HR-LR数据;提出的模型包含两个部分: – correct…

中北大学软件学院操作系统实验二进程调度算法

实验时间 2024年 4 月13日14时至16时 学时数 2 1.实验名称 实验二进程调度算法 2.实验目的 (1)加深对进程的概念及进程调度算法的理解; (2)在了解和掌握进程调度算法的基础上,编制进程调度算法通用程序,将调试结果显示在计算机屏幕上&am…

什么是大语言模型以及如何构建自己的大型语言模型?

一、关于大语言模型 LLM 对于无数的应用程序非常有用,如果我们自己从头开始构建一个,那我们可以了解底层的ML技术,并可以根据特定需求定制LLM,但是对资源的需求巨大。大型语言模型是一种 ML 模型,可以执行各种自然语言…

LeetCode 315—— 计算右侧小于当前元素的个数

阅读目录 1. 题目2. 解题思路一3. 代码实现一4. 解题思路二5. 代码实现二 1. 题目 2. 解题思路一 参考 剑指 Offer——数组中的逆序对,我们依然借助于归并排序中的合并操作来计算某个元素右侧小于它的元素个数。 如上图最左边所示,第五行开始进行第一次…

国内首个48小时大模型极限挑战赛落幕,四位“天才程序员”共同夺冠

4月21日晚,第四届ATEC科技精英赛(ATEC2023)线下赛落幕。本届赛事以大模型为技术基座,围绕“科技助老”命题,是国内首个基于真实场景的大模型全链路应用竞赛。ATEC2023线下赛采用48小时极限挑战的形式,来自东…

2024年最新版云开发cms开通步骤,开始开发微信小程序前的准备工作,认真看完奥!

小程序官方有改版了,搞得石头哥不得不紧急的再新出一版,教大家开通最新版的cms网页管理后台 一,技术选型和技术点 1,小程序前端 wxml css JavaScript MINA原生小程序框架 2,数据库 云开发 云数据库 云…

springboot 批量下载文件, zip压缩下载

一、使用hutool 工具类 效果&#xff1a;下载速度可以 1、依赖&#xff1a;hutool <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26</version> </dependency>2、调用方式 im…

Android Studio开发工具学习之Git分支操作

这里写目录标题 2.1 查看、创建本地分支2.1.1 命令行查看与创建2.1.2 Git窗口查看与创建 2.2 切换分支&#xff1a;Checkout2.3.1 通过命令行切换 2.3.2 通过Git窗口切换 2.3 合并分支&#xff1a;Merge2.3.1 操作command_new、gui-new分支2.3.1 通过命令行将gui-new分支合并至…

LT8711UXD助力新款Swtich游戏机底座《4K/60HZ投屏方案》

Nintendo Switch&#xff08;OLED版&#xff09;正面搭载了一块分辨率为720P的7.0英寸OLED屏幕&#xff1b;具有白色和电光蓝电光红2种颜色&#xff1b;机身长度102毫米&#xff0c;宽度242毫米&#xff0c;厚度13.9毫米&#xff0c;重量约420克。 [2]Nintendo Switch&#xff…

举个栗子!Tableau 技巧(271):同时筛选不同年份的 TopN 数据

零售企业的销售数据分析中&#xff0c;经常用排序来查看过去一年或者几年的数据 TopN 情况。如果可以在同一视图中&#xff0c;呈现很多年的数据排名&#xff0c;且通过筛选能灵活调整 TopN 的 N 值&#xff0c;岂不是更方便&#xff1f; 如下示例&#xff1a;图表呈现了各品牌…

centos7上搭建mongodb数据库

1.添加MongoDB的YUM仓库&#xff1a; 打开终端&#xff0c;执行以下命令来添加MongoDB的YUM仓库&#xff1a; sudo vi /etc/yum.repos.d/mongodb-org-4.4.repo 在打开的文件中&#xff0c;输入以下内容&#xff1a; [mongodb-org-4.4] nameMongoDB Repository baseurlh…