美文网首页一些收藏
RocketMQ-存储设计-整体组织方式

RocketMQ-存储设计-整体组织方式

作者: 洛神灬殇 | 来源:发表于2022-04-20 13:32 被阅读0次

    RocketMQ 主要的存储文件包含commitlog、consumequeue、IndexFile。其文件布局如下:

    image

    RocketMQ存储设计-Commitlog文件

    Commitlog文件格式

    image

    消息存储文件:所有主题的消息随着到达Broker的顺序写入commitlog文件,每个文件默认为1G,文件的命名也及其巧妙,使用该存储在消息文件中的第一个全局偏移量来命名文件,这样的设计主要是方便根据消息的物理偏移量快速定位到消息所在的物理文件。RocketMQ commitlog文件使用顺序写,极大提高了文件的写性能。

    ConsumeQueue文件格式

    image
      **ConsumeQueue文件:消息消费队列文件,是Commitlog文件的基于Topic的索引文件,主要用于消费者根据Topic消费消息,其组织方式为/topic/queue,同一个队列中存在多个文件,consumequeue设计极具技巧性,其每个条目使用固定长度(8字节commitlog物理偏移量、4字节消息长度、8字节tag hashcode)**,这里不是存储tag的原始字符串,而是存储hashcode,目的就是确保每个条目的长度固定,可以使用访问类似数组下标的方式来快速定位条目,极大的提高了ConsumeQueue文件的读取性能,试想一下,消息消费者根据topic、消息消费进度(consumeuqe逻辑偏移量),即第几个Consumeque条目,这样根据消费进度去访问消息的方法为使用逻辑偏移量logicOffset*20即可找到该条目的起始偏移量(consumequeue文件中的偏移量),然后读取该偏移量后20个字节即得到了一个条目,无需遍历consumequeue文件。
    

    1、consumequeue文件引入的目的?

    2、consumequeue文件存储tag hashcode而不是存储tag字符串的原因?

    相关文章

      网友评论

        本文标题:RocketMQ-存储设计-整体组织方式

        本文链接:https://www.haomeiwen.com/subject/zydvertx.html