快速弄明白RocketMQ的CommitLog、ConsumeQueue、indexFile、offsetTable 以及多种偏移量对比 - 乂墨EMO

快速弄明白RocketMQ的CommitLog、ConsumeQueue、indexFile、offsetTable 以及多种偏移量对比 - 乂墨EMO

💡 原文中文,约2300字,阅读约需6分钟。
📝

内容提要

文章讨论了消息存储结构,类似于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。

➡️

继续阅读