内容提要
文章讨论了消息存储结构,类似于Kafka,采用变长消息和顺序写入。每个文件大小为1G,文件名包含起始偏移量。ConsumeQueue存储CommitLog中的消息偏移量,作为索引文件,消费时需读取两次。此外,提到DefaultMQPushConsumer的两种模式:BROADCASTING和CLUSTERING,分别处理Offset存储方式。
关键要点
-
消息存储结构类似于Kafka,采用变长消息和顺序写入。
-
每个文件大小为1G,文件名包含起始偏移量,格式为20位,左边补零。
-
ConsumeQueue存储CommitLog中的消息偏移量,作为索引文件,消费时需读取两次。
-
ConsumeQueue是定长结构,每条记录固定20个字节。
-
DefaultMQPushConsumer有两种模式:BROADCASTING和CLUSTERING,分别处理Offset存储方式。
-
BROADCASTING模式使用LocalFileOffsetStore,Offset存储在Consumer本地。
-
CLUSTERING模式由Broker端存储和控制Offset,使用RemoteBrokerOffsetStore。
-
indexFile用于根据消息ID查找消息,解决ConsumeQueue中未存储消息ID的问题。
延伸问答
RocketMQ的CommitLog是什么?
CommitLog是RocketMQ中存储消息内容的文件,采用变长消息和顺序写入,每个文件大小为1G。
ConsumeQueue在RocketMQ中有什么作用?
ConsumeQueue是CommitLog的索引文件,存储消息在CommitLog中的偏移量,消费时需读取两次。
DefaultMQPushConsumer的BROADCASTING和CLUSTERING模式有什么区别?
BROADCASTING模式使用LocalFileOffsetStore,Offset存储在Consumer本地;CLUSTERING模式由Broker端存储Offset,使用RemoteBrokerOffsetStore。
RocketMQ的indexFile有什么用途?
indexFile用于根据消息ID查找消息,解决ConsumeQueue中未存储消息ID的问题。
RocketMQ的文件命名规则是什么?
每个文件的名称长度为20位,左边补零,包含起始偏移量,例如第一个文件为00000000000000000000,起始偏移量为0。
ConsumeQueue的记录结构是怎样的?
ConsumeQueue是定长结构,每条记录固定20个字节,存储CommitLog中的offset。