当前位置: 首页 > 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.rkmt.cn/news/1456372.html

相关文章:

  • 全自动评论系统精确度记录分析
  • 求推荐!适配知网查重,国内靠谱的 AI 论文写作辅助网站有哪些?
  • CentOS 8停服后,yum报错‘No URLs in mirrorlist’的三种修复姿势(附Vault源配置)
  • 基于低复杂度自适应信号处理的波束成形技术解析【附代码】
  • 适配食安检测标准!云克隆全链条自研技术赋能行业质控
  • Luyten Java反编译工具:5分钟快速上手与核心功能详解
  • Qwen3.6-35B-A3B-APEX-MTP-GGUF新手入门:从下载到运行的5分钟快速教程
  • 如何快速地拥有一个帮你管理知识库的agent
  • PX4无人机飞控系统:从入门到实战的完整指南
  • 2026最新英文论文降AI指南:实测5款高效辅助工具,专治Turnitin标蓝危机
  • 以“车路运能”聚势,千方科技干线物流自动驾驶业务稳步推进 - 外贸老黄
  • 蚂蚁森林能量自动收取终极指南:如何轻松实现全天候自动化
  • Beyond Compare 5密钥生成终极指南:三种方案深度解析
  • 数学建模小白也能看懂的火箭残骸定位教程:用Python从零复现深圳杯A题(附完整代码)
  • h2ogpt-oasst1-512-12b模型架构深度剖析:从GPTNeoX到NPU支持的完整指南 [特殊字符]
  • Cursor免费试用终极重置指南:三步快速解除AI编程助手限制
  • 解决老旧Mac系统升级难题的OpenCore Legacy Patcher实战指南
  • 【2026实测避坑】检测满屏飘蓝?4款英文论文降AI工具横测与优缺点对比图
  • GEO科普系列专题:第一期初识GEO(Generative Engine Optimization)
  • 4张A100跑通义千问微调太奢侈?试试用Colab+LoRA低成本调教Qwen-14B
  • 如何突破Cursor试用限制:5分钟掌握设备标识重置技术
  • CentOS 7下RabbitMQ 3.8.16保姆级安装与开机自启配置(含主机名报错解决)
  • ESP32-CAM三轴人脸追踪高达头:嵌入式视觉与PID控制实战
  • ETCHR-FLUX.2-klein-9B:革命性视觉推理助手如何解决多模态大模型的图像编辑瓶颈
  • Web端AI革命:如何使用Gemma-4-E2B-it-litert-lm构建离线AI应用
  • 基于Arduino与蓝牙的无线电压测量系统设计与实现
  • TRIBE v2 Subcortical核心功能解析:皮层下脑区活动预测技术详解 [特殊字符]
  • Windows系统优化终极指南:如何用WinUtil在15分钟内完成专业级系统配置
  • 【限时解密】AI秒杀融合架构的7个致命断点:92%团队在第4步崩溃(附Grafana+Prometheus监控模板)
  • 告别手机性能限制:Winlator让Android设备流畅运行Windows应用和游戏