MetaQ存储机制是什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MetaQ的消息存储方式和kafka的partition存放方式类似,在MetaQ中消息的存放分为物理队列和逻辑队列。物理队列:物理队列我们一般用commitlog来表示,在一个broker上面,所有发到broker上的信息都会按顺序写入物理队列中,物理队列又由许多文件组成,当一个文件被写满(默认大小为1G)时,则创建一个新的文件继续写入,文件以offset的方式来命名,与kafka中的partition命名类似。逻辑队列:逻辑队列我们一般用consumequeue来表示,在消息被写入物理队列之后,如果消费端想从broker拉取消息,就需要一个索引文件,MetaQ中将每个Topic分为了几个区,每个区对应了一个消费队列,不过这些消费队列只是由一个个索引文件组成。消费端在拉取消息的时候,只要知道自己订阅的Topic从nameserver获取broker地址建立连接之后,就能根据消费队列中的索引文件,去物理队列中获取订阅的消息。CommitLog以物理文件的方式存放,每台Broker上的CommitLog被本机器上所有的ConsumeQueue共享。在CommitLog中,一个消息的存储长度是不固定的,MetaQ中采取了一些机制,尽量往CommitLog中顺序写,但是可以支持随机读。ConsumeQueue的内容也会被写到磁盘里进行持久存储,但是ConsumeQueue的内容是通过异步刷盘的方式进行。