RocketMQ---消息存储

本文详细解析了RocketMQ的消息存储原理,包括CommitLog作为消息存储文件,ConsumeQueue用于消息消费,IndexFile实现消息索引。同时介绍了消息存储的更新与恢复机制,以及过期文件的删除策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.消息存储的原理如下:

1.1 CommitLog

1.消息存储文件,所有消息主题都存储到CommitLog中;

2.commitLog每个大小为1G,方便做内存映射;

3.commitLog的文件名为为该文件第一条消息的物理偏移量。

1.2 ConsumeQueue

1.消息消费队列:消息到达CommitLog后,将异步发送给消息消费队列供消费者消费(根据偏移量查找消息,从偏移量读取size长度的内容)。

2.不存全量消息

1.3 IndexFile

1.消息索引文件,主要存消息Key与Offset的对应关系。

2.消息消费队列与索引文件的更新

RocketMQ通过开启一个线程ReputMessageService来准时转发CommitLog文件更新事件,相应的任务处理器根据转发的消息及时更新consumeQueue与indexFile文件。

3.消息消费队列与索引文件恢复

如果消息成功存储到CommitLog中,转发任务未成功执行,Broker宕机,将导致CommitLog,ConsumeQueue,IndexFile文件数据不一致。

故障恢复:存在abort文件,说明broker非正常关闭,会从最后一个文件找起,找到第一个存储正常的文件。

4.过期文件删除机制

CommitLog与ConsumeQueue采用的是顺序写,所有写操作都落在最后一个文件上,之前的文件将不会被更新;

文件默认72个小时内没被更新过则为过期文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值