如果把RocketMQ看做应用系统CommitLog就相当于应用的系统中的存储层也就是数据库的功能。下面就来聊一聊CommitLog的设计以及CommitLog包含的组件中的一些重要属性字段wrotePosition、committedPosition、flushedPosition、fileFromOffset、flushedWhere、committedWhere之间的关系。
RocketMQ源码版本:5.0.0
1.CommitLog的组成
CommitLog
是MQ对存储层的抽象,整体的架构设计如下:
从上图可以看出来整个分为了三层:
-
MappedFile
作为底层的数据存储,默认情况下单个文件大小1G。MappedFile提供了一些对文件元数据以及可用性的一些操作以及添加消息数据到文件中的接口。
-
MappedFileQueue
将底层的单个数据文件以队列的形式组织起来,主要提供获取单个MappedFile的一些操作。例如:获取第一个或者最后一个数据文件,以及文件属性的相关操作都是由MappedFileQueue 提供。
-
CommitLog
整个对外提供服务的封装,同时一些数据刷盘操作都是在CommitLog中实现的。
MappedFile文件列表组