幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

终于弄明白了RocketMQ的存储模型

  RocketMQ优异的性能表现,必然绕不开其优秀的存储模型。
  这篇文章,笔者按照自己的理解,尝试分析RocketMQ的存储模型,希望对大家有所启发。
  1整体概览
  首先温习下RocketMQ架构。
  整体架构中包含四种角色:Producer:消息发布的角色,Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。Consumer:消息消费的角色,支持以push推,pull拉两种模式对消息进行消费。NameServer:名字服务是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。BrokerServer:Broker主要负责消息的存储、投递和查询以及服务高可用保证。
  本文的重点在于分析BrokerServer的消息存储模型。我们先进入broker的文件存储目录。
  消息存储和下面三个文件关系非常紧密:数据文件commitlog消息主体以及元数据的存储主体;消费文件consumequeue消息消费队列,引入的目的主要是提高消息消费的性能;索引文件indexfile索引文件,提供了一种可以通过key或时间区间来查询消息。
  RocketMQ采用的是混合型的存储结构,Broker单个实例下所有的队列共用一个数据文件(commitlog)来存储。
  生产者发送消息至Broker端,然后Broker端使用同步或者异步的方式对消息刷盘持久化,保存至commitlog文件中。只要消息被刷盘持久化至磁盘文件commitlog中,那么生产者发送的消息就不会丢失。
  Broker端的后台服务线程会不停地分发请求并异步构建consumequeue(消费文件)和indexfile(索引文件)。2数据文件
  RocketMQ的消息数据都会写入到数据文件中,我们称之为commitlog。
  所有的消息都会顺序写入数据文件,当文件写满了,会写入下一个文件。
  如上图所示,单个文件大小默认1G,文件名长度为20位,左边补零,剩余为起始偏移量,比如00000000000000000000代表了第一个文件,起始偏移量为0,文件大小为1G1073741824。
  当第一个文件写满了,第二个文件为00000000001073741824,起始偏移量为1073741824,以此类推。
  从上图中,我们可以看到消息是一条一条写入到文件,每条消息的格式是固定的。
  这样设计有三点优势:顺序写磁盘的存取速度相对内存来讲并不快,一次磁盘IO的耗时主要取决于:寻道时间和盘片旋转时间,提高磁盘IO性能最有效的方法就是:减少随机IO,增加顺序IO。对比随机和顺序读写在内存和磁盘中的表现《ThePathologiesofBigData》这篇文章指出:内存随机读写的速度远远低于磁盘顺序读写的速度。磁盘顺序写入速度可以达到几百兆s,而随机写入速度只有几百KBs,相差上千倍。快速定位因为消息是一条一条写入到commitlog文件,写入完成后,我们可以得到这条消息的物理偏移量。每条消息的物理偏移量是唯一的,commitlog文件名是递增的,可以根据消息的物理偏移量通过二分查找,定位消息位于那个文件中,并获取到消息实体数据。通过消息offsetMsgId查询消息数据消息offsetMsgId是由Broker服务端在写入消息时生成的,该消息编号包含两个部分:Broker服务端ipport8个字节;commitlog物理偏移量8个字节。
  我们可以通过消息offsetMsgId,定位到Broker的ip地址端口,传递物理偏移量参数,即可定位该消息实体数据。3消费文件
  在介绍consumequeue文件之前,我们先温习下消息队列的传输模型发布订阅模型,这也是RocketMQ当前的传输模型。
  发布订阅模型具有如下特点:消费独立:相比队列模型的匿名消费方式,发布订阅模型中消费方都会具备的身份,一般叫做订阅组(订阅关系),不同订阅组之间相互独立不会相互影响。一对多通信:基于独立身份的设计,同一个主题内的消息可以被多个订阅组处理,每个订阅组都可以拿到全量消息。因此发布订阅模型可以实现一对多通信。
  因此,rocketmq的文件设计必须满足发布订阅模型的需求。
  那么仅仅commitlog文件是否可以满足需求吗?
  假如有一个consumerGroup消费者,订阅主题mymactopic,因为commitlog包含所有的消息数据,查询该主题下的消息数据,需要遍历数据文件commitlog,这样的效率是极其低下的。
  进入rocketmq存储目录,显示见下图:
  消费文件按照主题存储,每个主题下有不同的队列,图中mymactopic有16个队列;每个队列目录下,存储consumequeue文件,每个consumequeue文件也是顺序写入,数据格式见下图。
  每个consumequeue包含30万个条目,每个条目大小是20个字节,每个文件的大小是30万2060万字节,每个文件大小约5。72M。和commitlog文件类似,consumequeue文件的名称也是以偏移量来命名的,可以通过消息的逻辑偏移量定位消息位于哪一个文件里。
  消费文件按照主题队列来保存,这种方式特别适配发布订阅模型。
  消费者从broker获取订阅消息数据时,不用遍历整个commitlog文件,只需要根据逻辑偏移量从consumequeue文件查询消息偏移量,最后通过定位到commitlog文件,获取真正的消息数据。
  这样就可以简化消费查询逻辑,同时因为同一主题下,消费者可以订阅不同的队列或者tag,同时提高了系统的可扩展性。4索引文件
  每个消息在业务层面的唯一标识码要设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic、key来查询这条消息内容,以及消息被谁消费。
  由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。订单IdStringorderId1234567890;message。setKeys(orderId);
  从开源的控制台中根据主题和key查询消息列表:
  进入索引文件目录,如下图所以:
  索引文件名fileName是以创建时的时间戳命名的,固定的单个IndexFile文件大小约为400M。
  IndexFile的文件逻辑结构类似于JDK的HashMap的数组加链表结构。
  HashMap数据结构
  索引文件主要由Header、SlotTable(默认500万个条目)、IndexLinkedList(默认最多包含2000万个条目)三部分组成。
  假如订单系统发送两条消息A和B,他们的key都是1234567890,我们依次存储消息A,消息B。
  因为这两个消息的key的hash值相同,它们对应的哈希槽(深黄色)也会相同,哈希槽会保存的最新的消息B的索引条目序号,序号值是4,也就是第二个深绿色条目。
  而消息B的索引条目信息的最后4个字节会保存上一条消息对应的索引条目序号,索引序号值是3,也就是消息A。5写到最后
  DatabasesarespecializingtheonesizefitsallapproachnolongerappliesMongoDB设计哲学
  RocketMQ存储模型设计得非常精巧,笔者觉得每种设计都有其底层思考,这里总结了三点:完美适配消息队列发布订阅模型;数据文件,消费文件,索引文件各司其职,同时以数据文件为核心,异步构建消费文件索引文件这种模式非常容易扩展到主从复制的架构;充分考虑业务的查询场景,支持消息key,消息offsetMsgId查询消息数据。也支持消费者通过tag来订阅主题下的不同消息,提升了消费者的灵活性。
  原文链接:https:mp。weixin。qq。comsUKahbGnJwOAPr3CD4ZVFQ

过年换新机有着落了!Reno9万事红配色喜庆,体验更是值回票这不快春节了嘛,相信有不少同学准备换新机过年了吧?我本来还想等一下后面发布的新旗舰的,但是目前来看春节前应该是没有新机了,于是索性就挑选起了近3个月发布的机型,经过一番查找和纠……玩游戏很认真的盖世小鸡G7游戏手柄本文作者为体验师向向的力量,首发于糖纸众测知名的品牌盖世小鸡最近又出了一款新产品,据说这个是第二款微软授权的游戏手柄,作为一个老游戏玩家,当然要第一时间分享给大家,……休斯顿世乒赛谁主沉浮?陈梦能成为历史用时最短的满贯选手吗?群雄逐鹿,谁主沉浮?休斯顿世乒赛硝烟升起,各路英豪擦拳磨掌,陈梦会如愿获得休斯顿世乒赛女单冠军吗?成为继邓亚萍、王楠、张怡宁、李晓霞、丁宁之后第六人大满贯获得者吗?并且创造历史……格林伍德已成过街老鼠球迷焚烧他的球衣表示不满格林伍德涉嫌强奸和殴打女友后,已经成为了过街老鼠,曼联俱乐部将其封杀,赞助商宣布停止与他的合作,球迷也对他非常不满,有球迷当街焚烧他的球衣。社交网站上的视频显示,有曼联球……我们承认NBA肌肉男很多,但是这4张照片真是P图周琦上榜我们承认NBA肌肉男很多,毕竟在这里训练很科学,饮食也跟得上,想要有肌肉真的不难。我们想要在NBA找出肌肉男很多,现役的詹姆斯,霍华德,锡安,退役的马龙,莫宁,奥尼尔都是如此。……宝乐薇科技护肤倡导者新消费浪潮崛起,新锐品牌英雄辈出!宝乐薇作为从自然汲取灵感,用科技保驾护航的新锐品牌,在护肤界强势破圈!当前消费者面临的护肤问题大致分为两种:一种是很温和,不用担心安全性……亚洲首位大满贯李娜为武汉捐款三百万,把老公当充电宝2017年,网球一姐李娜在参加某档电视节目,打算与主持人较量球技时,她看了眼工作人员,随口说了一句:输的人,要不一人给他们买一套房子?主持人听了之后,被吓得惊慌失措。……同事请假说去参加冬奥会,结果得了冰壶混双铜牌,当事人为有这样2月11日下午六点,一位网友在社交平台发文称,自己的瑞典同事请假去参加冬奥会,结果得了冰壶混双铜牌。同事请假说去参加冬奥会,结果得了冰壶混双铜牌,这也太厉害了,妥妥的斜杠……清淡饮食就是白粥咸菜?骗了国人多年的误区,希望你没有中招生活中,无论是感冒发烧、手术前后、肠胃不舒服、持久体力消耗前,还是如今四处可见的养生之道里面,都可以看到清淡饮食这四个字,清淡饮食因为这过于频繁的出现率,也都快让一部分人觉得这……父母常将这4句话挂在嘴边,能培养出更自律的孩子,真的很有用文红丽说教育父母是孩子的第一任老师,在很多人身上总能看到父母的影子。青少年不仅仅是一个国家发展的未来,在他们身上更是寄托了一个家庭的希望。为了能够培养出更优秀的孩子……早报比尔盖茨称全球变暖需控制vivoT1降至冰点价【手机中国早报】随着社会逐渐工业化,全球的平均气温越来越高,这影响到了在地球上生存的所有生物,所以控制全球变暖在当下一直是人们十分重视的问题。双十一电商大促,在众多活动商……周边店大批售罄工厂机器开到冒烟动画中国奇谭不只在网播平台当顶1月12日,由上海美术电影制片厂(以下简称上美影)出品的动画短片合集,凭借三集的故事,播出不到半月晋升为网播平台关注顶流,在播放量持续走高的同时,动画口碑也维持高位。伴随热映,……
好家伙!提前结束本赛季?利拉德场均轰下32分7助近8战1胜7负,输到裤衩子都没了。目前开拓者落后西部第10的雷霆3。5个胜场,意味着基本可以宣告无缘季后赛。可惜的是哪怕现在就此摆烂,也无法拥有文班亚马碎片,谁让同……矿业大学校友比特币爆仓致诈捐背后或因币价上涨做空失败近期,中国矿业大学校友吴幽因未能履行2019年承诺向母校捐赠的1100万元人民币,被中国矿业大学教育发展基金会告上法庭后成为了失信被执行人,事件引发公众关注。吴幽解释称,……我国成品油价迎年内首次下调中新社电2023年开局,国内成品油零售限价先涨后跌。临近春节,成品油价迎年内首次下调。国家发展和改革委员会17日消息称,根据近期国际市场油价变化情况,按照现行成品油价格形……英特尔晶圆代工服务新负责人确定当地时间3月21日,英特尔公司宣布,任命StuartPann为英特尔商业代工业务英特尔晶圆代工服务(IFS)的高级副总裁兼总经理,接替该部门首任总经理RandhirThakur……正宗泡菜的做法,酸辣脆爽3天开吃,不用老水不生花,做法超简单正宗泡菜的做法,酸辣脆爽,3天开吃,不用老水不生花,做法超简单大家好,欢迎来到美食格物,最近的天气越来越凉,很多人家都已经开始做泡菜了,酸酸的泡菜酸辣可口,特别的开胃,不……东呈集团城市便捷酒店投资品鉴会华南站圆满收官3月23日,东呈集团城市便捷酒店投资品鉴会华南站在厦门成功举办。本次品鉴会以闽商新势呈就共赢为主题,从行业趋势、品牌实力、运营亮点、加盟优势等方面出发,为福建投资人深度剖析城市……世界首富换人!中国首富是他全球财富金字塔尖的位置,易主了。3月23日,胡润研究院发布《2023胡润全球富豪榜》,奢侈品之王LVMH(酩悦轩尼诗路易威登集团)的伯纳德阿诺特首次登顶全球富豪之冠。……总奖金22万!长治此项大赛等你来!山西新闻网长治频道讯(记者张浩)3月23日下午,长治市人民政府新闻办公室召开新闻发布会。市文旅局、市文联相关负责同志发布了长治市以地名、景区名命名歌曲创作大赛的组织实施、活动安……五一出境游旺销部分热门线路跟团名额所剩无几近日,泰国真的已经贵到去不起了吗泰国出游等话题登上微博热搜榜。事实上,随着近期我国出境团队游目的地名单再扩容,叠加五一小长假临近,出境游变得愈发炙手可热。记者实地探访多家……2022年汽车销量排行榜比亚迪夺冠据中汽协消息,2022年我国汽车销量2686。4万辆,同比增长2。1。其中乘用车批发销量为2348。7万,同比增长9。5。打破南北大众局面比亚迪夺冠比亚迪首次拿下全……一带一路倡议提出十周年甘肃扬帆远航踏上新征程中欧班列天马号发车本网记者宋芳科实习生王文博今年是共建一带一路倡议提出10周年,甘肃作为一带一路建设的黄金地段和前沿门户正在走向开放前沿。走进新时代,甘肃被国家赋予……在银河系寻找金星区行星的行动已经开始尽管金星是离地球最近的行星,但我们对它仍有很多不了解的地方,特别是当涉及到它的银河系规模的历史时。它曾经适合居住吗?它曾经有水吗?它的大气层是否曾经与今天围绕其炽热表面旋转的二……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网