当前位置: 首页 > news >正文

互联网全景消息(5)之RocketMq快速入门(下)

一、RocketMQ的存储设计

1.1 Domain Model

1.1.1 Message

        Message是RocketMQ消息引擎中的主体。messageId是全局唯一的。MessageKey是业务系统(生产者)生成的,所以如果要结合业务,可以使用MessageKey作为业务系统的唯一索引。

1.1.2 Topic

        subTopics==Message Queue,其实在内存逻辑中,subTopics是对Topics的一个拓展,尤其是在MQTT这种协议下,在Topic底下会有很多subTopics。

1.1.3 Queue

        Queue是消息物理管理单位,比如在RocketMQ的控制台中,就可以看到每一个queue中的情况(比如消息的堆积情况、消息的TPS、QPS)

1.1.4 Offset

        对于每一个Queue来说都有Offset,这个是消费位点。

1.1.5 Group

        业务场景中,如果有一堆发送者,一堆消费者,所以这里使用Group的概念进行管理。

1.1.6 对应关系

        Message与 Topic是多对一的关系,一个Topic可以有多个Message.

        Topic到Queue是一对多的关系,这个也是方便横向拓展,也就是消费的时候,这里可以有很多很多的Queue.

        一个Queue只有一个消费位点(Offset),所以Topic和Offset也是一对多的关系Topic和Group也是多对多的关系。

1.1.7 消费并发度

        从上面模型可以看出,要解决消费并发,就是要利用Queue,一个Topic可以分出更多的queue,每一个queue可以存放在不同的硬件上来提高并发。 

二、消息存储结构

        RocketMQ因为有高可靠性的要求(宕机不丢失数据),所以数据要进行持久化存储。所以RocketMQ 采用文件进行存储。

2.1 存储文件

        

  • commitlog:消息存储目录;
  • config:运行期间的一些配置信息;
  • consumequeue:消息消费队列存储目录;
  • index:消息索引文件存储目录;
  • checkpoint:文件检查点,存储commitlog最后一次刷盘时间,consumequeue最后一次刷盘时间,index索引文件最后一次 刷盘时间。

2.2 消息存储结构

        RocketMQ消息的存储是由ConsumeQueue和CommitLog配合完成 的,消息真正的物理存储文件是CommitLog,ConsumeQueue是消息的逻辑队列,类似数据库的索引文件,存储的是指向物理存储的地址。每 个Topic下的每个Message Queue都有一个对应的ConsumeQueue文件。 

  • commitlog:存储消息的元数据;
  • comsumequeue:存在消息在commitlog的索引;
  • indexfile:为了消息查询提供了一种通过key或时间区间来查询消息的方法,这种通过IndexFile来查找消息的方法不影响发送与消费消息的主流程;

2.2.1 commitlog

        CommitLog 以物理文件的方式存放,每台 Broker 上的 CommitLog 被本机器所有 ConsumeQueue 共享,文件地址:$ {user.home} \store\$ { commitlog} \ $ { fileName}。在CommitLog 中,一个消息的存储长度是不固定的, RocketMQ采取一些机制,尽量向CommitLog 中顺序写 ,但是随机读。commitlog 文件默认大小为lG ,可通过在 broker 置文件中设置 mappedFileSizeCommitL

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DHCP协议原理(网络协议)
  • Appium高级话题:混合应用与原生应用测试策略
  • js中箭头函数与普通函数的区别
  • idea 恢复 pom 文件呈现灰色并带删除线
  • 将Java程序打包成EXE程序
  • 【云原生安全篇】一文掌握Harbor集成Trivy应用实践
  • 重头开始嵌入式第四十一天(数据结构 树 哈希表)
  • 【图像拼接】基于SIFT/SURF特征算法的图像拼接,matlab实现
  • 图分类!!!
  • Linux——应用层自定义协议与序列化
  • uniapp中使用picker-view选择时间
  • HTTP 协议格式大揭秘:Fiddler 助阵,网络交互全掌握!
  • 如何使用 Python 发送带附件的电子邮件
  • 阿里云AI基础设施全面升级,模型算力利用率提升超20%
  • html 与 md 文件数据格式转换
  • 【node学习】协程
  • 【面试系列】之二:关于js原型
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Python连接Oracle
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • vue 个人积累(使用工具,组件)
  • vue数据传递--我有特殊的实现技巧
  • Vue学习第二天
  • WebSocket使用
  • 产品三维模型在线预览
  • 工作手记之html2canvas使用概述
  • 普通函数和构造函数的区别
  • 入门到放弃node系列之Hello Word篇
  • 深度学习入门:10门免费线上课程推荐
  • 时间复杂度与空间复杂度分析
  • 一文看透浏览器架构
  • 原生 js 实现移动端 Touch 滑动反弹
  • ​补​充​经​纬​恒​润​一​面​
  • ​力扣解法汇总946-验证栈序列
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • ()、[]、{}、(())、[[]]命令替换
  • (10)STL算法之搜索(二) 二分查找
  • (超详细)语音信号处理之特征提取
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (十六)、把镜像推送到私有化 Docker 仓库
  • (算法二)滑动窗口
  • .NET 4.0中的泛型协变和反变
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • .NET使用存储过程实现对数据库的增删改查
  • .net专家(高海东的专栏)
  • .sys文件乱码_python vscode输出乱码
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法