首页 > 其他分享 >RocketMQ原理简述(二)

RocketMQ原理简述(二)

时间:2025-01-04 20:33:03浏览次数:3  
标签:文件 MessageQueue 写入 broker topic 简述 原理 日志 RocketMQ

1.前言

此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂

这篇文章紧挨着上一篇博客来进行编写,有些不清楚的可以看下上一篇博客:RocketMQ相关原理简述-CSDN博客

2.topic,messageQueue,broker

    topic的创建的时候需要进行指定MessageQueue的数量,那么topic,messageQueue,broker之间的关系是什么呢,假如你有一个topic,这个topic里有4个messageQueue,topic里有100条数据,那么到每个messageQueue里就会有25条数据,每个messageQueue里的数据的数量也不是固定,是根据消息写入MessageQueue时候的策略定的。这些MessageQueue是存放到Broker上来。大致格式如下所示:

   生产消息的时候要选择哪个messageQueue进行写入?

    生产者会从NameServer集群上进行拉取Topic的元数据信息,这些元数据信息包含:topic里有哪些MessageQueue,这些MessageQueue都是位于哪个Broker上呢。生产者拉取到这些信息,就会按照MessageQueue的写入策略将对应的数据写入的到应的Broker上。

3.broker的数据存储

当生产者将消息发送到broker之后,会做什么操作呢。首先会将消息存储到日志文件中。这个日志文件叫做commitLog,直接是顺序写这个文件。这个CommitLog是很多磁盘文件,每个磁盘文件限定最多1G,如果写满1G,就会创建一个新的CommitLog文件。

上述图感觉是没有进行说明MessageQueue是在哪里体现,其实,在一个Broker里,每个Topic下的每个MessageQueue都会有一系列的ConsumeQueue文件。

在磁盘上就会有下面格式的日志文件:

$Home/store/consumequeue/{topicId}/{queueId}/{filename}

topicId指的是某个topic,queueId指的是某个MessageQueue,这个ConsumeQueue文件中存储的是一条消息在commitLog日志中的Offset偏移量。

具体来说:有一个topic,它有4个MessageQueue,然后在两个Broker上,每个Broker上会存储两个MessageQueue,当broker收到一条消息之后,会写入到commitLog日志文件中,并获取这条消息在CommitLog日志文件中的偏移量offset,写入到MessageQueue对应的ConsumeQueue文件中。实际上在ConsumeQueue文件中存储的是消息在CommitLog日志文件中的偏移量offset。

4.消息写入的性能保证

broker的写入消息是通过操作系统的PageCache和顺序写这两种机制来进行保证写入性能的。

首先broker会以顺序写的机制将消息写入到commitLog日志文件中,也就是每次写的时候在文件的末尾进行添加一行数据就可以了,这种顺序写的机制要比文件随机写的机制要高很多。

其次在进行写入CommitLog日志文件的时候,不是直接写入到磁盘文件中,而是先进入到OS的PageCache内存缓存中,然后由后台的线程异步将OS PageCahe中的文件进行刷入到磁盘中。

总结来言,就是通过磁盘文件的顺序写+OS PageCache+OS 异步刷盘 这三种方式来进行提高消息的写入速率。

异步刷盘的机制有可能会导致数据的丢失,如果要保证数据的不丢失可以将异步刷盘改为同步刷盘机制,这样的话写入的性能就会降低很多。

标签:文件,MessageQueue,写入,broker,topic,简述,原理,日志,RocketMQ
From: https://blog.csdn.net/u013127325/article/details/144924919

相关文章

  • 《计算机组成及汇编语言原理》阅读笔记:p200-p240
    《计算机组成及汇编语言原理》学习第15天,p200-p240总结,总计40页。一、技术总结1.derivedtype(1)定义Arepresentationfordatabuiltupbycombiningbasictypes.Forexample,afractiontypecouldbederivedfromtwointegers,thenumeratorandthedenomi......
  • 解密prompt系列46. LLM结构化输出代码示例和原理分析
    最近闭源大模型们都陆续支持结构化输出,这一章我们先结合demo看下开源和闭源对结构化输出的支持,随后会介绍ConstrainedDecoding和FormatRestrictingInstructions两种结构化输出约束方案,最后会给出结构化输出对比自然语言输出的一些观点。代码示例闭源-OpenAIhttps://pla......
  • 你对Sentry有了解吗?它的作用有哪些?原理是什么?
    Sentry的概述:Sentry是一个开源的应用性能监控(APM)和错误追踪平台,它专注于帮助开发人员实时监控应用程序的性能、捕获并分析错误。Sentry在前端开发领域尤为重要,因为它能够帮助开发团队及时定位并解决前端代码中的问题,从而提升应用的稳定性和用户体验。Sentry的作用:实时监控应用......
  • 浅析汽车诊断技术原理
    摘要        汽车诊断技术是现代汽车维修与保养领域的核心技术之一。本文详细阐述了汽车诊断技术的原理,涵盖了传统汽车诊断技术和现代汽车诊断技术。介绍了汽车诊断技术的分类,回顾其发展历程,探讨其未来发展趋势。旨在为汽车行业从业者和研究人员提供学习参考。一、......
  • C++ 面向对象编程:多态、虚函数原理
    多态的通用描述便是,使用父类指针调用函数,可以根据对象类型来调用对应类型函数,我们分几个步骤来理解,先看下类的占用空间,然后拓展到虚函数对应数组,最后理解多态的原理。我们先来看下在多态中没有任何成员变量的类大小为多大,其实如果没有任何成员变量的话,他大小按理说来应该是零,......
  • 沙箱模拟支付宝支付2--支付宝支付原理
    1.支付流程1.1扫码支付流程详解1.生成支付的订单2.收银台会向支付宝发起预下单请求3.预下单请求会调用商家后台的接口,调用支付宝的API接口4.支付宝会返回二维码的连接5.商家后台将二维码的链接转换为一个二维码的图片,返回给商家收银台6.商家收银台会将二维码图片展示......
  • 2024秋季学期 马克思主义基本原理
    思维导图这玩意还没整理好,后面好了应该会更新上来期末小论文这玩意理论上不应该分享出来的,但我感觉我这次写的怪好的,想给大家看看()正好老师要求提交手写版,所以说我就提供一份手写扫描版的供大家看看,电子版就不提供了......
  • 学习线程池原理从手写一个线程池开始
    概述线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和细节吗?如果直接去看jdk源码的话,可能有一定的难度,那么我们可以先通过手写一个简单的线程池框架,去掌握线程池的基本原理后,再去看jdk的线程池源码就......
  • 微机原理与接口技术——期末笔记 实验总结 侧重Win32汇编代码实现
    微机原理与接口技术声明:本篇文章是在复习期末考试的过程中根据教材与实验所总结的复习资料,参考书目为*《微机原理与接口技术(第2版)——Win汇编、接口及设备驱动》郭兰英赵祥模编著*。文章只重点总结了前两章、第五章、五大芯片、键盘、AD转换的具体代码示例。所有代码均来......
  • 编译原理期末速成总结
    编译原理期末速成词法分析DNA和NFA题型一:NFA->DFA(确定化)NFA的几种构建文法->NFA​1.注意图中的E,F是无效的,不用加在NFA中​2.最后的单独的小b其实对应了终态转换函数->NFA转换函数其实就是关系,按照关系画图即可正规式->NFA​1.右上角的图提供了准则,......