1.IndexHeader头部,40字节,记录IndexFile的统计信息:

begainTimestamp:该索引文件中包含消息的最小存储时间

endTimestamp:该索引文件中包含消息的最大存储时间

begainPhyoffset:该索引文件中包含消息的最大物理偏移量(commitlog文件偏移量)

endPhyoffset:该索引文件中包含消息的最大物理偏移量(commitlog文件偏移量)

hashslotCount:hashslot个数,并不是hash槽的个数,在这里意义不大

indexCount:Index条目列表当前已使用的个数,Index条目在Index条目列表中按顺序存储

2.Hash槽,一个IndexFile默认包含500万个Hash槽,每个Hash槽存储的是落在该Hash槽的hashcode最新的Index的索引

3.Index条目列表:默认一个索引文件包含2000万个条目,每一个Index条目结构如下

hashcode:key的hashcode

phyoffset:消息对应的物理偏移量

timedif:该消息存储时间与第一条消息的时间戳的差值,小于0该消息无效

preIndexNo:该条目的前一条记录的Index索引,当出现hash冲突时,构建的链表结构

关键:map<String消息索引key,long 消息物理偏移量>

IndexFile#putKey

根据索引key查找消息:

IndexFile#selectPhyOffset

计算偏移

该hashcode没有对应的条目直接返回。

遍历冲突链,链中所有的phyOffsets.add(phyOffsetRead);

【mq读书笔记】Index索引文件的更多相关文章

  1. 【mq读书笔记】如何保证三个消息文件的最终一致性。

    考虑转发任务未成功执行,此时消息服务器Broker宕机,导致commitlog,consumeQueue,IndexFile文件数据不一致. commitlog,consumeQueue遍历每一条消息 ...

  2. 【mq读书笔记】消息消费队列和索引文件的更新

    ConsumeQueue,IndexFile需要及时更新,否则无法及时被消费,根据消息属性查找消息也会出现较大延迟. mq通过开启一个线程ReputMessageService来准时转发commitL ...

  3. 【mq读书笔记】mq索引文件刷盘

    索引文件的刷盘并不是采取定时刷盘机制,而是每更新一次索引文件就会将上一次的改动刷写到磁盘. 同步刷盘: GroupCommitRequest将被提交到GroupCommitService线程,Grou ...

  4. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  5. 【mq读书笔记】mq消息存储

    comitlog文件 ConsumerQueue文件 IndexFile文件 RocketMQ将所有主题的消息存储在同一个文件中,确保消息发送时顺序写文件. 为了提高消息消费的效率RocketMQ引入 ...

  6. 【mq读书笔记】消息消费过程(钩子 失败重试 消费偏移记录)

    在https://www.cnblogs.com/lccsblog/p/12249265.html中,PullMessageService负责对消息队列进行消息拉取,从远端服务器拉取消息后将消息存入P ...

  7. 《UNIX-Shell编程24学时教程》读书笔记Chap3,4 文件,目录操作

    Chap3 文件操作   P28 在这章中,要着重记住一些常用的选项,要有使用正则表达式的思维,能更快达到目的.----@im天行 3.1 列文件名 .profile  sh的初始化脚本: .kshr ...

  8. 【mq读书笔记】mq事务消息

    关于mq食物以什么样的方式解决了什么样的问题可以参考这里: https://www.jianshu.com/p/cc5c10221aa1 上文中示例基于mq版本较低较新的版本中TransactionL ...

  9. 【mq读书笔记】消息过滤机制

    mq支持表达式过滤和类过滤两种模式,其中表达式又分为TAG和SQL92.类过滤模式允许提交一个过滤类到FilterServer,消息消费者从FilterServer拉取消息,消息经过FilterSer ...

随机推荐

  1. StrongArray

    * System类中包含了一个static void arraycopy(object src,int srcops,object dest ,int destpos, int length )方法, ...

  2. Java学习的第五十四天

    1.例13.1二次函数的解 import java.util.Scanner; public class Cjava { public static void main(String[]args) { ...

  3. Hadoop高可用

    一.原因 - NameNode是HDFS的黑心配置HDFS有事hadoop的核心组件 NameNode 在Hadoop及群众至关重要 - NameNode的宕机导致集群的不可用 二.解决方案 其中 N ...

  4. POJ1840 Eqs

    题意描述 Eqs 求一个五元方程 \(a_1x_1^3+a_2x_2^3+a_3x_3^3+a_4x_4^3+a_5x_5^3=0\) 的解的个数. 题中给出 \(a_i\) 的值并且保证 \(-50 ...

  5. Docker(2)- Centos 7.x 下安装 Docker

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 前言 虚拟机安装 centos ...

  6. SAP S/4HANA 2020安装实录

    欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 今天开始试着安装SAP S/4HANA 2020版本,也是目前SAP ERP最高的版本,总安装文件大小大概50GB,数据库版本必须是HANA ...

  7. JMeter100个线程竟然只模拟出1个并发

    线程组,是说到 JMeter 会第一时间想到的东西,也是我认为 JMeter 最难理解的知识点.因为项目让你做个压测,首先就是要考虑并发,用 JMeter 就是用多线程 来模拟多并发.但在看到线程组编 ...

  8. odbc。INI配置

    [ODBC Data Sources] ST = OSCAR ODBC DRIVER [ST] Driver = /opt/ShenTong/odbc/lib/liboscarodbcw.so Ser ...

  9. Java集合系列-HashSet

    原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755431.html 一.概述 HashSet是基于哈希实现的set集合,其实它底层是一个value ...

  10. Mybatis的二级缓存、使用Redis做二级缓存

    目录 什么是二级缓存? 1. 开启二级缓存 如何使用二级缓存: userCache和flushCache 2. 使用Redis实现二级缓存 如何使用 3. Redis二级缓存源码分析 什么是二级缓存? ...