当前位置: 首页 > news >正文

Rocketmq学习第三篇

一、Namesrv 端

nameSrv 程序入口

org.apache.rocketmq.namesrv.NamesrvStartup

二、Broker 端

broker 程序入口

org.apache.rocketmq.broker.BrokerStartup

三、索引文件

org.apache.rocketmq.store.index.IndexFile

Snipaste_2026-06-03_18-19-19

索引文件由索引文件头(header)、槽位(slot)、消息的索引内容三部分组成。

1.1.索引文件头

beginTimestamp 8位 long 类型,索引文件构建第一个索引的消息落在broker 的时间。

endTimestamp 8位 long 类型,索引文件构建最后一个索引的消息落在broker 的时间。

beginPhyOffset 8位 long 类型,索引文件构建第一个索引的消息 commitLog 偏移量。

endPhyOffset 8位 long 类型,索引文件构建最后一个索引的消息 commitLog 偏移量。

hashSlotCount 4 位 int 类型,构建索引占用的槽位数。

indexCount 4 位 int 类型,索引文件中构建的索引个数。

8+8+8+8+4+4=40

1.2.槽位

默认每个索引文件的slot个数是500 万个,每个 slot 是4位的int 类型 数据计算消息的对应消息在 IndexFile 中的偏移量(位于那个槽位上),偏移量的计算公式为 slotPos = Math.abs(keyHash) % hasSlotNum。

hasSlotNum为500w

1.3.消息的索引内容

消息的索引内容长度是20位定长内容的数据

4位int 值, 存储的是key的hash 值

8位long 值,存储的是消息在 commitlog 的物理偏移量 phyOffset

4位int 值,存储了当前消息跟索引文件中第一个消息在 broker 落地的时间差

4位int 值,如果存在hash冲突,存储的是删一个消息的索引地址。

1.4.索引文件的使用

当通过 Key 查找消息时,系统会首先计算 Key 的哈希值,并对 500万(槽位总数)取模,计算出目标槽位的位置。然后,从该槽位读取出最新索引的序号,并顺着链表向前遍历所有冲突的索引条目,通过比对 Key 的哈希值来找到目标消息

四、持久化

刷盘

org.apache.rocketmq.broker.processor.SendMessageProcessor#sendMessage>org.apache.rocketmq.store.MessageStore#putMessage>org.apache.rocketmq.store.DefaultMessageStore#putMessage>org.apache.rocketmq.store.DefaultMessageStore#asyncPutMessage>org.apache.rocketmq.store.CommitLog#asyncPutMessage>org.apache.rocketmq.store.MappedFile#appendMessage(org.apache.rocketmq.store.MessageExtBrokerInner, org.apache.rocketmq.store.AppendMessageCallback, org.apache.rocketmq.store.CommitLog.PutMessageContext)>org.apache.rocketmq.store.CommitLog#submitFlushRequest # 刷盘位置

本文来自博客园,作者:TheLifelongLearner,转载请注明原文链接:https://www.cnblogs.com/The-Lifelong-Learner/p/20296427

http://www.jsqmd.com/news/944893/

相关文章:

  • 全自动评论系统精确度记录分析
  • 求推荐!适配知网查重,国内靠谱的 AI 论文写作辅助网站有哪些?
  • 2026年天津离婚律师怎么挑选?关键5个要点避免踩雷 - 本地品牌推荐
  • 保姆级避坑指南:Ubuntu 20.04/22.04 安装NVIDIA驱动,告别黑屏和循环登录
  • 基于低复杂度自适应信号处理的波束成形技术解析【附代码】
  • 适配食安检测标准!云克隆全链条自研技术赋能行业质控
  • CentOS 8停服后,yum报错‘No URLs in mirrorlist’的三种修复姿势(附Vault源配置)
  • 2026应届生降AI率软件盘点:深度消痕+保护隐私哪家强?
  • 告别‘无声’烦恼:手把手教你用USB麦克风(UAC 2.0)在Windows 10上实现完美录音
  • 从文库到成药:核酸适配体费用与多肽筛选市场价
  • AI Agent 的三次进化
  • 性价比优先!盘点平价好用的国产 AI 写作网站,应届学生党收藏
  • 北京沙发翻新换皮换布2026年本地靠谱推荐——匠阁、御匠、锦修三大品牌详解,服务区域覆盖北京各区,专业沙发翻新换皮换布一站式解决方案 - 我叫一
  • WSL2图形化桌面避坑实录:解决Gnome仅Root可用、VcXsrv连接失败与CUDA驱动冲突
  • HS2-HF_Patch:Honey Select 2汉化优化补丁的终极解决方案
  • Luyten Java反编译工具:5分钟快速上手与核心功能详解
  • 给全自动评论系统添加 点赞 收藏 关注 功能
  • Qwen3.6-35B-A3B-APEX-MTP-GGUF新手入门:从下载到运行的5分钟快速教程
  • 企业无线网络配置不求人:手把手教你用神州数码DCWS-6028 AC搞定三层发现(附Option 43配置详解)
  • 基于视觉与图像的植物信息采集与处理技术解析【附代码】
  • HPLT BERT Base LV实战教程:从文本分类到问答系统的完整应用
  • 鸿蒙Flutter三级联动选择器技术详解:省市区级联选择实现方案
  • 终极解决方案:3分钟搞定Windows热键冲突检测
  • 如何快速地拥有一个帮你管理知识库的agent
  • 2026广州GEO优化公司怎么选?实测五家服务商,这份选型指南帮你避坑 - GEO优化
  • 技术模拟的“四诊仪”,为何永远无法触及中医的灵魂?
  • Mermaid在线编辑器终极指南:如何用代码思维重塑可视化工作流
  • PX4无人机飞控系统:从入门到实战的完整指南
  • 保姆级教程:在Windows 11上为LightningChart .NET 10.3.2配置WPF与WinForms双环境
  • ThinkPad风扇控制终极指南:用TPFanCtrl2释放你的笔记本潜能