我想问下,rocketmq是怎么存储消息的,一组主从broker都挂了,是不是会丢数据?
以下为热心网友提供的参考意见
RocketMQ的消息存储主要通过三种文件类型来实现:CommitLog、ConsumeQueue和IndexFile。其中,CommitLog是消息主体以及元数据的存储主体,存储了生产者端写入的消息主体内容,消息内容不是定长的。单个文件大小默认为1G,文件名长度为20位,左边补零,剩余为起始偏移量。例如,第一个文件的起始偏移量为0,文件大小为1G=1073741824;当第一个文件写满了,第二个文件的起始偏移量为1073741824,以此类推。
ConsumeQueue则是用来存储 CommitLog 的索引,以提高消息消费的性能。而IndexFile则提供了一种可以通过key或时间区间来查询消息的方法。
至于你提到的主从Broker都挂掉的情况,RocketMQ会保证在一段时间内消息不会丢失。这是由于RocketMQ使用了一种基于日志的存储方式,将消息以顺序写入的方式追加到文件中,从而实现高性能的消息存储和读取。此外,Apache RocketMQ 使用存储时长作为消息存储的依据,即每个节点对外承诺消息的存储时长。在存储时长范围内的消息都会被保留,无论消息是否被消费;超过时长限制的消息则会被清理掉。因此,只要消息的存储时长未超过规定的时间,即使主从Broker出现问题,数据也不会丢失。
以下为热心网友提供的参考意见
异步刷盘会丢 同步刷盘不会丢 ,此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”
本文来自投稿,不代表新手站长_郑州云淘科技有限公司立场,如若转载,请注明出处:https://www.cnzhanzhang.com/12270.html