重新理解RocketMQ Commit Log存储协议

发布于:2024-10-24 编辑:匿名 来源:网络

最近突然感觉:很多软件、硬件都是有根本原因的,不是为了设计,而是为了解决那个时候那个场景的需求。一旦你了解了它们,你就会感觉自己在和设计师交谈,了解他们的想法,学习他们的方法,同屏思考:活到老,学到老。

1、我们思考一下 1.1 Consumer Queue Offset 是否连续?为什么? 1.2 Commit Log Offset是否连续?为什么? 1.3 用Java编写的文件默认是big-endian或little-endian。为什么? 2、Commit Log的实际分布 大家在思考的同时,我们来回忆一下commit log是如何分布的?在Broker配置的存储根目录下,通过查看Broker实际生成的提交日志文件,可以看到类似如下的数据文件分布。

:可以看到Broker的真实数据文件存储分布。真实存储有多个文件,每个文件都有一个类似于数字的字符串作为文件名,大小为1G。

从源码中我们可以知道,实际的抽象模型如下: Commit Log存储文件分布抽象由上图可知:Commit Log是一类文件的名称。其实Commit Log文件有很多,每一个都可以称为Commit Log。

文档。如图所示,一共有T个Commit Log文件,从过去到现在按照创建时间排列。

每个Commit Log文件按照消息写入的顺序保存消息,并且始终写入创建时间最长的文件,并且同一时间只能有一个线程写入。如图,第1个文件,1,2,3,4...表示该文件中的消息条数。

可以看到第1条消息是第1个Commit Log文件的最后一条消息,第1条消息是第1个Commit Log文件。 2 个提交日志的第一条消息。

注1:每个Commit Log文件中所有消息实际占用的存储空间<=1G。我们自己思考一下造成这个问题的原因。

注2:每次写入Commit Log,RocketMQ都会锁定它。请参阅代码片段。

Log文件中有很多消息,这些消息是按照既定的协议存储的。具体协议是什么?你怎么知道的? 3. Commit Log 存储协议 关于 Commit Log 存储协议,我们询问了 ChatGPT,这是它给我的答复。

虽然不正确,但是回复格式和描述都非常接近答案。ChatGPT回复我们看了源码,详细解释了:我整理了Log存储协议,如下图;我理解的Commit Log存储协议的描述1:我整理出来的消息协议号与代码不一致,只是在代码中标注了顺序,真实物理文件中的存储协议会更详细。

注2:我写的《RocketMQ分布式消息中间件:核心原理与最佳实践》中,这张图缺少Body内容。这里补充一下,其他数据补充的更详细。

这里需要说明几个问题: 二进制协议是有字节序的,也就是常说的大端序和小端序。这里我就不详细阐述大端和小端了。

有兴趣的同学可以google或者在ChatGPT上提问。答案肯定会比我说的更好。

在Java中,一个byte占1个字节,一个int占4个字节,一个short占2个字节,一个long占8个字节。 Host的编码并不是简单地将IP:Port作为字符串直接转为字节数组,而是将每个数字按顺序编码为一个字节。

这将在下一节 Golang 代码中进行解释。在扩展信息的编码中,使用不可见字符作为划分,因此扩展字段键值不能包含这两个不可见字符。

具体是哪两个呢?你能找到他们吗?我们看到这个协议之后,如何证明你的实体文件是按照这个协议写的呢? 4.使用Golang解锁RocketMQ Commit LogRocketMQ是用java编写的。根据上面描述的存储协议,我使用Golang编写了一个可以解锁Commit Log和Cosumer Queue的工具。

代码地址:Log站点,直接解析Log中的Commit消息并打印。指定消费位置,首先解析Consumer Queue,获取Commit Log Offset,然后根据Commit Log Offset直接解析Commit Log,并打印。

Golang中没有依赖RocketMQ的代码,纯粹依赖协议解码。 golang-import这里贴了一个golang中解析Commit Log Offset的例子:在Java中,这个offset是一个long类型,占用8个字节。

在golang中,通过读取8字节数据并按照big-endian顺序解码为int64,就可以得到正常的Commit Log Offset。我运行了Golang-demo的演示结果。

请参考:阅读consumer-queue-commit-log5。为了回答最初的问题,以下是我个人的看法。

请参考:1.1 Consumer Queue Offset 是否连续?为什么?是连续的。消费者队列偏移量是指索引消息在每个队列中的下标。

下标当然是连续的。消费者还利用这种连续性来避免空消费网站提交。

每个索引消息占用相同的空间,即20字节。结构如下:消费者队列索引消息结构。

这里的物理位置是提交日志偏移量。 1.2 Commit Log Offset是否连续?为什么?不是连续的。

Commit Log Offset是指每条消息在所有Commit Log文件中的字节偏移量。每条消息的大小是不确定的,所以Commit Log Offset,即字节偏移量必须不同。

。我们可以知道,每两个偏移量之差的绝对值就是前一条消息的总长度(以字节为单位)。

并且上图中的“Commit Log存储文件分布抽象”存在一个误解。每个小方块的大小其实是不一样的。

1.3 用Java编写的文件默认是big-endian或little-endian。为什么?大尾数。

字节顺序实际上有两种:数据存储顺序和网络传输顺序。 Java中默认使用的big-endian顺序与网络传输保持一致,这样方便编码和解码。

每个网络传输层数据报文的第一个字节表示后续数据使用什么协议进行传输。这样,数据接收方收到数据时,首先按照字节顺序解析协议,然后按照协议对后续数据进行解码。

符合人类思考和解决问题方式的字节序列。以上是我的理解。

如果有什么问题可以加我微信聊。微信二维码讨论注意:由于RocketMQ的某些版本可能有所不同,本文讨论4.9.3版本。

你可以参考这个方法来了解5.0甚至其他版本中其他数据文件的存储协议格式。

重新理解RocketMQ Commit Log存储协议

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 金医疗医疗转板申请已获批准,即将在联交所主板上市

    金医疗医疗转板申请已获批准,即将在联交所主板上市

    中国领先的高科技医疗器械及医疗服务企业集团——金医疗医疗科技股份有限公司(以下简称“金医疗医疗科技股份有限公司”) 「金医药医疗」或「集团」)今日欣然宣布,集团向香港联交所提交的转板申请已获批准,将于6月15日交易结束时退出香港创业板。 将于6月16日9点30分在香

    06-17

  • 夫妻联手河南启动面条IPO

    夫妻联手河南启动面条IPO

    不起眼的面条即将支持IPO。 投资界-天天IPO获悉,河南念香食品股份有限公司(简称“念天食品”)近日向上交所提交招股说明书,保荐机构为国金证券股份有限公司。 届时,小姐食品将成为继克明食品之后第二家在A股上市的面条企业。 回想起来,思念食品的前身是河南南阳一家濒临

    06-18

  • 什么样的电视能让人愿意24小时开着呢?

    什么样的电视能让人愿意24小时开着呢?

    虽然我们鼓励审美多元化,但总有一些趣味是永恒的,古今中外、五行八工高度相通。 比如这个词:天衣无缝。 用来形容诗歌的自然构图或事物的彻底、完美。 它的本义是天上神仙穿的衣服是没有缝线的。 在古人眼中,这是凡人无法企及的完美。 时至今日,“无缝”在设计领域仍然具

    06-21

  • 新闻 -信天创投资已完成人民币基金二期增资,总规模5亿元,

    新闻 -信天创投资已完成人民币基金二期增资,总规模5亿元,

    据投资界12月21日消息,信天创投资宣布完成人民币基金二期增资,增资后规模达5亿元。 截至目前,信天创投资管理的资产规模近10亿元。 资料显示,信天创投资成立于2006年,是一家致力于发掘互联网早期优质项目的专业投资机构。 投资阶段涵盖天使至A轮,投资规模1万元至1万元。

    06-17

  • FLYPRO飞豹携新款无人机和系统解决方案亮相CES 2017

    FLYPRO飞豹携新款无人机和系统解决方案亮相CES 2017

    FLYPRO携全新无人机和系统解决方案在CES上首次亮相。 2017年1月5日,一年一度的全球科技盛会CES正式开幕。 此次活动恰逢CES 50周年,吸引了约100家企业参展。 展厅面积超过10,000平方英尺,预计将吸引超过17万名游客。 在2018年CES上,全球智能运动无人机的开创者和领导者FLY

    06-17

  • 昭和电工增资1093亿日元(约65亿元人民币)增资半导体材料产量

    昭和电工增资1093亿日元(约65亿元人民币)增资半导体材料产量

    日本昭和电工23日宣布,将通过在日本及海外公开发行的方式筹集约1亿日元资金,募集资金将用于生产半导体材料。 用于资本投资,增加半导体材料的产能。 原日立化学于2016年以约1万亿日元收购了现在的昭和电工材料,公司将根据需求,通过公开发行及增发(超额配发)的方式发行总

    06-08

  • IPC PCB技术趋势研究项目向PCB制造商开放至7月13日

    IPC PCB技术趋势研究项目向PCB制造商开放至7月13日

    6月27日,美国伊利诺伊州班诺克本——IPC针对电子行业PCB制造商的全球研究项目已经启动。 本次保密调查项目是《年IPC PCB技术趋势调研报告》全球数据收集的一部分,调查截止日期为7月13日。 本研究项目的目的是衡量PCB行业当前的技术能力以及能力发展的潜力未来五年。 调查内

    06-06

  • 深度解析-这匹来自硅谷的“微投界黑马”如何唤醒低迷的中国微投市场

    深度解析-这匹来自硅谷的“微投界黑马”如何唤醒低迷的中国微投市场

    雷锋网出版社:本文是作者龙魔、Microarray首席科学家、电子与软件设计师。 本文介绍的是人物Setlak、Authentec 创始人 以及该技术的主要发明者、Touch ID 的设计者、除 C-Q-T 技术系列之外的所有商用电容式指纹传感器所基于的技术原理的发现者。 有传言称,iPhone 7 将继续使

    06-18

  • 网络审判,更适合2000后人的电子泡菜

    网络审判,更适合2000后人的电子泡菜

    《职务侵占 30 万,我赌公司的枪里没有子弹》《我跟老公的弟弟领了结婚证,我现在想离婚》《因为女朋友太笨,我朋友想对她进行精神鉴定》如果你看到上面的标题时皱起了眉头,那么你只会更加震惊,感叹世界如此之大,充满了奇迹。 我是从律师的短视频账目中得出这个结论的。 他

    06-21

  • 心的接力·惟实励新——2023德同之都年会暨科技创新论坛峰会成功举办

    心的接力·惟实励新——2023德同之都年会暨科技创新论坛峰会成功举办

    当前,科技创新已成为国际战略博弈的主战场和驱动经济高质量发展的重要引擎。 2017年,德同资本继续锚定国家重大政策和部署,保持辩证思维和战略定力,在新时代、新趋势、新产业经济形势下全力赋能被投企业,为投资者带来持续稳定。 返回。 新的一年是克服困难、迎难而上的一

    06-17

  • 多地发布2021年减税降费“成绩单”,广东新增减税超1400亿

    多地发布2021年减税降费“成绩单”,广东新增减税超1400亿

    多地发布2021年减税降费“成绩单”,广东新增减税超1400亿,上头条。 近日,重庆、广西等地陆续发布2021年新减税降费“成绩单”。 其中,为加大对实体经济的支持力度,减轻企业负担,广东新增超1亿今年减税降费1万元。 据了解,在今年1月国务院召开的新闻发布会上,国家税务总

    06-18

  • 专注于生命科学领域机器人研发的“博工科技”获数千万元Pre-A轮融资,由青城资本领投

    专注于生命科学领域机器人研发的“博工科技”获数千万元Pre-A轮融资,由青城资本领投

    投资圈(ID:pedaily) 9月11日,广东博工医疗科技股份有限公司(以下简称“博工科技”)完成数千万元Pre-A轮融资。 本轮融资由青城资本领投,华峰资本担任本轮融资独家财务顾问。 本轮募集资金将用于加速生命科学机器人产品的研发和市场化进程的快速推进。 博工科技成立于20

    06-18