目前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都会被索引,不设置就没有
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/