CommitLog
生产者向Broker发送的消息,会以顺序写的方式,写入CommitLog文件,CommitLog文件的根目录由配置参数storePathRootDir决定,默认每一个CommitLog的文件大小为1G,如果文件写满会新建一个CommitLog文件,以该文件中第一条消息的偏移量为文件名,小于20位用0补齐:
比如第一个文件中第一条消息的偏移量为0,那么第一个文件的名称为00000000000000000000,当这个文件存满之后,需要重新建立一个CommitLog文件,一个文件大小为1G,
1GB = 102410241024 = 1073741824 Bytes,所以下一个文件就会被命名为00000000001073741824。
数据格式
CommitLog中存储的每条消息的数据格式如下:
- 消息总长度,占4个字节;
- 魔数,占4个字节;
- 消息体CRC校验和,占4个字节;
- 队列ID,占4个字节;
- 标识,占4个字节;
- 队列的偏移量,占8个字节;
- 消息在文件的物理偏移量,占8个字节;
- 系统标识,占4个字节;
- 发送消息的时间戳,占8个字节;
- 发送消息的主机地址,占8个字节;
- 存储时间戳,占8个字节;
- 存储消息的主机地址,占8个字节;
- 消息的重试次数,占4个字节;
- 事务相关偏移量,占8个字节;
- 消息内容的长度,占4个字节;
- 消息内容,由于消息内容不固定,所以长度不固定;
- 主题名称的长度,占1个字节;
- 主题名称内容,长度不固定;
- 消息属性长度,占2个字节;
- 消息属性内容,长度不固定;

RocketMQ一般会保存一个物理偏移量offSet,从CommitLog中获取消息内容。
© 版权声明
文章版权归作者所有,未经允许请勿转载。