tongchenkeji 发表于:2022-5-12 15:50:570次点击 已关注取消关注 关注 私信 RocketMQ存储模型方式是什么?[阿里云消息队列MQ] 暂停朗读为您朗读 RocketMQ存储模型方式是什么? 「点点赞赏,手留余香」 赞赏 还没有人赞赏,快来当第一个赞赏的人吧! 海报 消息队列 MQ# RocketMQ973# 云消息队列 MQ1430# 存储536# 消息中间件1371
游客gwxzsspn6nezeAM 2023-11-28 0:27:04 1 目前RocketMQ存储模型使用本地磁盘进行存储,数据写入为producer -> direct memory -> pagecache -> 磁盘,数据读取如果pagecache有数据则直接从pagecache读,否则需要先从磁盘加载到pagecache中。
1327334153129086AM 2023-11-28 0:27:04 3 RocketMq在设计上遵循了消息文件+索引文件的方式,每种文件都只会追加写。按作用不同分为三类文件: 消息文件commitLog: 一个broker对应一组消息文件commitLog,所有topic的消息都存在commitLog中,写完一个继续写下一个 索引文件consumeQueue: rocketMq中每个topic对应多个queue,每个queue对应一组索引文件consumeQueue,commitLog中的每条消息在consumeQueue中都对应一条索引数据,索引的key为消费位点,内容为commitLog中消息的位置信息。消费位点表示当前消费到第几条消息了,在rocketMq中,消费者都是按消费位点来broker上拉取消息的,比如consumer1,消费topic1下的queue2中的消息,开始消费时,位点为1,consumer1每消费完一条消息,位点就加1,根据这个递增的位点,就可以拉取到queue2中对应所有消息 索引文件index: 除了满足正常消费的消息索引功能外,还需要满足根据某些关键字查询消息的功能,为了保证查询速度,索引文件是少不了的。这些关键字对应的索引就存在index文件中,一个broker对应一组index文件。rocketMq提供了根据消息msgId、消息key来查询消息的功能,对应的,msgId以及指定的消息key就会被索引,其中msgId是自动生成的,肯定有的,消息key是producer发送消息前设置的,可以设置一组key,每个key都会被索引,不设置就没有
目前RocketMQ存储模型使用本地磁盘进行存储,数据写入为producer -> direct memory -> pagecache -> 磁盘,数据读取如果pagecache有数据则直接从pagecache读,否则需要先从磁盘加载到pagecache中。
1.cluster 集群模式 2.broadcast 广播模式
RocketMq在设计上遵循了消息文件+索引文件的方式,每种文件都只会追加写。按作用不同分为三类文件: 消息文件commitLog: 一个broker对应一组消息文件commitLog,所有topic的消息都存在commitLog中,写完一个继续写下一个
索引文件consumeQueue: rocketMq中每个topic对应多个queue,每个queue对应一组索引文件consumeQueue,commitLog中的每条消息在consumeQueue中都对应一条索引数据,索引的key为消费位点,内容为commitLog中消息的位置信息。消费位点表示当前消费到第几条消息了,在rocketMq中,消费者都是按消费位点来broker上拉取消息的,比如consumer1,消费topic1下的queue2中的消息,开始消费时,位点为1,consumer1每消费完一条消息,位点就加1,根据这个递增的位点,就可以拉取到queue2中对应所有消息
索引文件index: 除了满足正常消费的消息索引功能外,还需要满足根据某些关键字查询消息的功能,为了保证查询速度,索引文件是少不了的。这些关键字对应的索引就存在index文件中,一个broker对应一组index文件。rocketMq提供了根据消息msgId、消息key来查询消息的功能,对应的,msgId以及指定的消息key就会被索引,其中msgId是自动生成的,肯定有的,消息key是producer发送消息前设置的,可以设置一组key,每个key都会被索引,不设置就没有