我想问下,rocketmq是怎么存储消息的,一组主从broker都挂了,是不是会丢数据?[阿里云]

我想问下,rocketmq是怎么存储消息的,一组主从broker都挂了,是不是会丢数据?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. RocketMQ的消息存储主要通过三种文件类型来实现:CommitLog、ConsumeQueue和IndexFile。其中,CommitLog是消息主体以及元数据的存储主体,存储了生产者端写入的消息主体内容,消息内容不是定长的。单个文件大小默认为1G,文件名长度为20位,左边补零,剩余为起始偏移量。例如,第一个文件的起始偏移量为0,文件大小为1G=1073741824;当第一个文件写满了,第二个文件的起始偏移量为1073741824,以此类推。

    ConsumeQueue则是用来存储 CommitLog 的索引,以提高消息消费的性能。而IndexFile则提供了一种可以通过key或时间区间来查询消息的方法。

    至于你提到的主从Broker都挂掉的情况,RocketMQ会保证在一段时间内消息不会丢失。这是由于RocketMQ使用了一种基于日志的存储方式,将消息以顺序写入的方式追加到文件中,从而实现高性能的消息存储和读取。此外,Apache RocketMQ 使用存储时长作为消息存储的依据,即每个节点对外承诺消息的存储时长。在存储时长范围内的消息都会被保留,无论消息是否被消费;超过时长限制的消息则会被清理掉。因此,只要消息的存储时长未超过规定的时间,即使主从Broker出现问题,数据也不会丢失。

  2. 异步刷盘会丢 同步刷盘不会丢 ,此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”