RocketMQ---消息存储

概述

  RocketMQ的 消息 存储在 本地文件系统中,默认路径:$home/store下;

  

  abort 

    该文件在 broker启动后自动创建,正常关闭broker,该文件会消失;

    若 在未启动broker的情况下,发现该文件存在,说明broker的关闭是非正常关闭;

  checkpoint

    存储 commitlog、consumequeue、index文件 最后的刷盘时间戳;

  ...

    

commitlog

commitlog目录及mappedFile

  commitlog目录中 存储着 很多的mappedFile文件

  当前broker中的所有消息 都是落盘到 这些mappedFile中

  mappedFile文件大小为1G(<=1G);

  mappedFile文件名 由 20位十进制数构成,左边补0,右边为起始偏移量;

  mappedFile当第一个文件写满,第二个文件的名称为上个的起始偏移位置;

  

  一个broker中仅有一个commitlog目录,所有的mappedFile文件都是存储在该目录下;

  无论当前broker存放多少topic的消息,这些消息都是被 顺序写入到mappedFile中;

  (消息在broker的存放 没有按照topic进行分类存储

 

  mappedFile 文件是顺序读写,所以访问效率很高;

消息单元

  

  mappedFile文件是 由一个个消息单元组成;

  每个消息单元包含:消息总长MsgLen、消息的物理位置physicalOffset、消息内容Body、消息体长度BodyLength、消息主题topic、消息生产者BornHost、消息发送时间戳BornTimeStamp、消息所在队列QueueId、消息在队列的偏移量QueueOffset...

 

consumequeue

  

  

 

  为了 提高查询效率,在 consumequeue 为每个topic创建一个目录,名称为topic;

  在该topic目录下,为每个该topic的queue创建一个目录,名称为队列ID;

  每个queue目录下,存放着若干的 consumequeue文件

  consumequeue文件commitlog的索引文件(可以根据consumequeue定位到具体的消息);

 

consumequeue文件  

  每个consumequeue文件 可以包含30w个索引条目

  每个索引条目 包含:消息在mappedFile中的偏移量commitlog Offset、消息长度、消息tag;

index

  除了通过 topic 进行消息消费外,还提供了根据Key进行消息查询的功能;

  通过store目录下的index中的index文件进行索引实现的快速查询(只有包含Key的消息才被写入);

 

  

  

 

posted on 2024-04-10 16:19  anpeiyong  阅读(5)  评论(0编辑  收藏  举报

导航