RocketMQ第5集

一  RocketMQ的工作流程

1.1 生产环节producer

Producer可以将消息写入到某Broker中的某Queue:其中Producer发送消息之前,会先向NameServer发出获取消息Topic的路由信息的请求NameServer返回该Topic的路由表及Broker列表简单的说:路由表的key为Topic名称,value则为所有涉及该TopicBrokerName列表。

1.2  MQ的存储

RocketMQ中的消息存储在本地文件系统中,这些相关文件默认在当前用户主目录下的store目录中。

abort:该文件在Broker启动后会自动创建,正常关闭Broker该文件会自动消失。若在没有启动Broker的情况下,发现这个文件是存在的,则说明之前Broker的关闭是非正常关闭。

1.2.1 mq的commitlog

commitlog目录中存放着很多的mappedFile文件,当前Broker中的所有消息都是落盘到这些mappedFile文件中的。需要注意的是,一个Broker中仅包含一个commitlog目录,所有的mappedFile文件都是存放在该目录中的。

mappedFile文件是顺序读写的文件,所有其访问效率很高

1.2.2 mq的consumequeue

consumequeue文件是commitlog的索引文件,可以根据consumequeue定位到具体的消息,consumequeue文件名也由20位数字构成,表示当前文件的第一个索引条目的起始位移偏移量

1.2.3 mq的存储读写流程

1.3 rocketmq与kafka性能比较*

首先,RocketMQ对文件的读写操作是通过mmap零拷贝进行的,将对文件的操作转化为直接对内存地址进行操作,从而极大地提高了文件的读写效率。

其次,consumequeue中的数据是顺序存放的,还引入了PageCache的预读取机制,使得对consumequeue文件的读取几乎接近于内存读取,即使在有消息堆积情况下也不会影响性能。

RocketMQ中的commitlog目录与consumequeue的结合就类似于Kafka中的partition分区目录。 mappedFile文件就类似于Kafka中的segment段。

Kafka中消息存放的目录结构是:topic目录下有partition目录,partition目录下有segment文件

Kafka中无需索引文件。因为生产者是将消息直接写在了partition中的,消费者也是直接从partition中读取数据的。

1.4 rocketmq的消费方式

消费者从Broker中获取消息的方式有两种:pull拉取方式和push推动方式。消费者组对于消息消费的模式又分为两种:集群消费Clustering和广播消费Broadcasting

Pull拉取方式:

由于拉取时间间隔是由用户指定的主动权自己掌控所以在设置该间隔时需要注意平稳:间隔太短,空请求比例会增加;间隔太长,消息的实时性太差

Push方式:

该模式下Broker收到数据后会主动推送给Consumer。该获取方式一般实时性较高。而这些都是基于Consumer与Broker间的长连接的。长连接的维护是需要消耗系统资源的。

集群消费模式下,相同Consumer Group的每个Consumer实例平均分摊同一个Topic的消息。即每条消息只会被发送到Consumer Group中的某个Consumer。

 

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

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

相关文章

火爆硅谷的“AI原生”代码编辑器Cursor使用体验

简单总结下: 如果现在你有需要改动到代码、有需要迅速了解一个开源项目的代码逻辑、或者对代码一直没有入门想要学习的话: 现在!立刻!马上!下载体验使用cursor!It‘s a life-saving decision!…

排序算法见解(2)

1.快速排序 1.1基本思想: 快速排序是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以…

IPv4地址和子网掩码

IP地址构成: IP 地址由 4 组 8 位二进制组成的,一共 32 位。 网络号和主机号: IP 地址由网络号和主机号组成。和第二张图片上一样,前面相同标蓝的就是网络号,不同的就是主机号。不同网络的通信需要通过路由器连接&…

Python简介、发展史

Python简介、发展史 本文目录: 零、时光宝盒 一、Python简介 二、Python设计者 三、Python发展史 四、Python语言的编程语言特性 五、Python现状 六、Python的未来 零、时光宝盒 我家所在的楼是3栋楼连接在一起的建筑,也就是3栋楼楼顶建筑上互通。…

react中的useCallback、useMemo、useRef 和 useContext

hook函数中依赖项:函数中使用的响应式变量组成的数组。响应式变量包括 props、state 和所有你直接在组件中定义的变量和函数。 前言 一、useCallback 缓存回调函数 使用方式 二、useMemo:缓存计算的结果 三、useRef:在多次渲染之间共享…

Spring MVC概述

1.1 MVC设计模式 MVC(Model-View-Controller)是一种软件设计模式,旨在将应用程序的业务逻辑、用户界面和用户输入分离。Spring MVC遵循这一模式,提供了以下几个核心组件: Model:表示应用程序的数据和业务…

sqlite3 数据库

1.sqlite3 相关命令: .tables 查看数据库中的表 .headers on/off 开启或者关闭表头 .width 设置列宽 .mode column 对齐 .schema 查询表头类型 2.sqlite3 的sql语句: 插入数据:insert into 表名 values; 查询表:select …

mysql的半同步模式

1.半同步模式原理 mysql的主备库通过binlog日志保持一致,主库本地执行完事务,binlog日志落盘后即返回给用户;备库通过拉取主库binlog日志来同步主库的操作。默认情况下,主库与备库并没有严格的同步,因此存在一定的概率…

ocp19c 学习第1篇

1.操作系统镜像,安装学习环境 通过网盘分享的文件:12-V995537-01.iso 链接: https://pan.baidu.com/s/1nYeKMSM-gwsJon9kpCs_Fw?pwd5537 提取码: 5537 2.linux7防火墙设置 linux7防火墙设置[rootocp4 ~]# systemctl status firewalld.service[rootoc…

【C++】如何解决“pointer to incomplete class type is not allowed”。

这个错误信息 “pointer to incomplete class type is not allowed” 在 C 中通常表示你正在尝试使用一个尚未完全定义的类的指针。 可能的原因及解决方法如下: 一、类定义不完整 前向声明后就使用指针: 如果你只是对一个类进行了前向声明&#xff08…

linux下一切皆文件,如何理解?

linux下一切皆文件,不管你有没有学过linux,都应该听过这句话,就像java的一切皆对象一样。 今天就来看看它的真面目。 你记住了,只要一个竞争退出它的PCB要被释放文件名,客服表也要被释放。那么,指向这个文件…

第100+23步 ChatGPT学习:概率校准 Sigmoid Calibration

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章:《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…

0.0 C语言被我遗忘的知识点

文章目录 位移运算(>>和<<)函数指针函数指针的应用场景 strcmp的返回值合法的c语言实数表示sizeof 数组字符串的储存 —— 字符数组与字符指针字符串可能缺少 \0 的情况 用二维数组储存字符串数组其他储存字符串数组的方法 位移运算(>>和<<) 右移(>…

c++中的匿名对象及内存管理

c中的匿名对象 A a;//a的生命周期在整个main函数中 a.Sum(1); //匿名对象生命周期只有一行&#xff0c;只有这一行会创建对象,出了这一行就会调析构 A().Sum(1);//只有这一行需要这个对象&#xff0c;其他地方不需要。 return 0; 日期到天数的转换 计算日期到天数转换_牛客…

Linux不可靠信号和可靠信号

1.不可靠信号和可靠信号 建立在早期的信号处理机制上**(1~31)的信号是不可靠信号** 不支持排队、可能会丢失&#xff0c;如果同一个信号连续产生多次&#xff0c;进程可能只相应了一次 如果解除屏蔽&#xff0c;取决于可靠性&#xff01;&#xff01;&#xff01;1 建立在新的信…

pytest自定义命令行选项

在 pytest 中&#xff0c;您可以通过多种方式自定义命令行选项。以下是一些常用的方法&#xff1a; 使用 pytest 的 addoption 方法 您可以在 conftest.py 文件中使用 pytest_addoption 钩子函数来添加自定义命令行选项。 下面是一个示例&#xff0c;展示如何添加一个名为 --…

python 执行mysql文件

MySQL 5.7 之前的版本在某些方面对存储过程的支持可能有限&#xff0c;通过 Python 脚本调用 SQL 文件是一种有效的方法来自动化数据库任务和提高运维效率。具体操作如下&#xff1a; # python 执行sql脚本 def execute_sql_script(mysql_params, script_name):# 使用 with 语…

硬件调试经验积累 关于RTC 时钟问题。

1. 电脑的 RTC 问题可以排查有这几个地方 1. 硬件问题 2. BIOS 问题 3. 系统问题 2. 排查问题大致的操作 1. 使用计算系统xx 通讯读取 RTC 芯片的寄存器&#xff0c;查看芯片是否有问题。 2. 再BIOS 下查看时钟是否准确。 查看芯片的连接性是否有问题。 3..多次----断电后开机…

【鸿蒙样式初探】多个组件如何共用同一样式

最近开发鸿蒙&#xff0c;刚接触难免二和尚摸不着头脑&#xff0c;尤其是样式...... 背景 在做银行卡显示的一个小需求时&#xff1a; 每个Text都需要设置fontColor:#FFFFFF" 想着是否可以简单点 解决历程 思路一&#xff1a;&#xff08;拒绝) 使用Styles 提取封装公…

虚拟化、双层虚拟化、容器是什么,应用场景有哪些

一、基本概念 虚拟化是一种资源管理技术&#xff0c;通过将计算机的实体资源&#xff08;如CPU、内存、磁盘空间和网络适配器等&#xff09;进行抽象和转换&#xff0c;使其能够被分割、组合成一个或多个电脑配置环境。多层虚拟化则是在虚拟化的基础上&#xff0c;再进行一次虚…