RocketMQ: 部署结构与存储特点

news2024/11/23 12:01:38

RocketMQ 是什么

  • 它是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点
    • Producer、Consumer、队列都可以分布式
    • Producer 向一些队列轮流发送消息
      • 队列集合称为 Topic
      • Consumer 如果做广播消费
      • 则一个 consumer 实例消费这个 Topic 对应的所有队列
      • 如果做集群消费,则多个 Consumer 实例平均消费这个 topic 对应的队列集合
    • 能够保证严格的消息顺序
    • 提供丰富的消息拉叏模式
    • 高效的订阅者水平扩展能力
    • 实时的消息订阅机制
    • 亿级消息堆积能力
    • 较少的依赖

部署结构


1 ) 物理部署结构

上图是 RocketMQ 网络部署特点

  • Name Server 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步
  • Broker 部署相对复杂
    • Broker 分为 Master 与 Slave,一个 Master 可以对应多个 Slave
    • 但是一个 Slave 只能对应一个 Master
    • Master 与 Slave 的对应关系通过指定相同的 BrokerName
    • 不同的 BrokerId 来定义 BrokerId 为 0 表示 Master,非 0 表示 Slave
    • Master 也可以部署多个,每个 Broker 与 Name Server 集群中的所有节点建立长连接
    • 定时注册 Topic 信息到所有 Name Server
  • Producer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接
    • 定期从 Name Server 取 Topic 路由信息
    • 并向提供 Topic 服务的 Master 建立长连接
    • 且定时向 Master 发送心跳,Producer 完全无状态,可集群部署
  • Consumer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接
    • 定期从 Name Server 取 Topic 路由信息
    • 并向提供 Topic 服务的 Master、Slave 建立长连接
    • 且定时向 Master、Slave 发送心跳
    • Consumer 既可以从 Master 订阅消息
    • 也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定

2 ) 逻辑部署结构

  • Producer Group
    • 用来表示一个发送消息应用,一个 Producer Group 下包含多个 Producer 实例
    • 可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个 Producer 对象
    • 一个 Producer Group 可以发送多个 Topic消息,Producer Group 作用如下:
      • 1.标识一类 Producer
      • 2.可以通过运维工具查询这个发送消息应用下有多个 Producer 实例
      • 3.发送分布式事务消息时,如果 Producer 中途意外宕机
        • Broker 会主动回调 Producer Group 内的任意
        • 一台机器来确认事务状态
  • Consumer Group
    • 用来表示一个消费消息应用,一个 Consumer Group 下包含多个 Consumer 实例
    • 可以是多台机器,也可以是多个进程,或者是一个进程的多个 Consumer 对象
    • 一个 Consumer Group 下的多个 Consumer 以均摊方式消费消息
    • 如果设置为广播方式,这个 Consumer Group 下的每个实例都消费全量数据

RocketMQ 存储特点


1 )零拷贝原理

Consumer 消费消息过程,使用了零拷贝,零拷贝包含以下两种方式

1. 使用 mmap + write 方式

  • 优点:即使频繁调用,使用小块文件传输,效率也很高
  • 缺点:不能很好的利用 DMA 方式,会比 sendfile 多消耗 CPU,内存安全性控制复杂,需要避免 JVM Crash 问题

2. 使用 sendfile 方式

  • 优点:可以利用 DMA 方式,消耗 CPU 较少,大块文件传输效率高,无内存安全新问题
  • 缺点:小块文件效率低于 mmap 方式,只能是 BIO 方式传输,不能使用 NIO

RocketMQ 选择了第一种方式,mmap+write 方式,因为有小块数据传输的需求,效果会比 sendfile 更好

关于 Zero Copy 的更详细介绍,参考:https://www.linuxjournal.com/article/6345

2 )文件系统

  • RocketMQ 选择 Linux Ext4 文件系统,原因如下:Ext4 文件系统删除 1G 大小的文件通常耗时小于 50ms,而 Ext3 文件系统耗时约 1s 左史,且删除文件时,磁盘IO 压力极大,会导致 IO 写入超时
  • 文件系统局面需要做以下调优措施
  • 文件系统 IO 调度算法需要调整为 deadline,因为 deadline 算法在随机读情况下,可以合并读请求为顺序跳跃方式,从而提高读 IO 吞吐量
  • Ext4 文件系统有以下 Bug,请注意

3 )数据存储结构

4 ) 存储目录结构

|-- abort
|-- checkpoint
|-- config
| |-- consumerOffset.json
| |-- consumerOffset.json.bak
| |-- delayOffset.json
| |-- delayOffset.json.bak
| |-- subscriptionGroup.json
| |-- subscriptionGroup.json.bak
| |-- topics.json
| `-- topics.json.bak
|-- commitlog
| |-- 00000003384434229248
| |-- 00000003385507971072
| `-- 00000003386581712896
`-- consumequeue
 |-- %DLQ%ConsumerGroupA
 | `-- 0
 | `-- 00000000000006000000
 |-- %RETRY%ConsumerGroupA
 | `-- 0
 | `-- 00000000000000000000
 |-- %RETRY%ConsumerGroupB
 | `-- 0
 | `-- 00000000000000000000
 |-- SCHEDULE_TOPIC_XXXX
 | |-- 2
 | | `-- 00000000000006000000
 | |-- 3
 | | `-- 00000000000006000000
 |-- TopicA
 | |-- 0
 | | |-- 00000000002604000000
 | | |-- 00000000002610000000
 | | `-- 00000000002616000000
 | |-- 1
 | | |-- 00000000002610000000
 | | `-- 00000000002616000000
 |-- TopicB
 | |-- 0
 | | `-- 00000000000732000000
 | |-- 1
 | | `-- 00000000000732000000
 | |-- 2
 | | `-- 00000000000732000000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2245984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python系列】浅析 Python 中的字典更新与应用场景

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

正版Simsolid快速无网格划分工具软件

相信各位结构工程师、产品设计工程师、仿真分析师们对SimSolid都不陌生,Altair SimSolid 是一款革命性的仿真软件,旨在为结构分析提供快速而准确的解决方案。SimSolid的独特之处在于它可以直接在完整的设计几何体上进行复杂的仿真,无需传统的…

DevOps-Jenkins-新手入门级

1. Jenkins概述 1. Jenkins是一个开源持续集成的工具,是由JAVA开发而成 2. Jenkins是一个调度平台,本身不处理任何事情,调用插件来完成所有的工作 1.1 什么是代码部署 代码发布/部署>开发书写的程序代码---->部署测试/生产环境 web服务…

Lucene(2):Springboot整合全文检索引擎TermInSetQuery应用实例附源码

前言 本章代码已分享至Gitee: https://gitee.com/lengcz/springbootlucene01 接上文。Lucene(1):Springboot整合全文检索引擎Lucene常规入门附源码 如何在指定范围内查询。从lucene 7 开始,filter 被弃用,导致无法进行调节过滤。 TermInSetQuery 指定…

tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 这次主要是学习数据增强, 训练集 验证集 测试集的构建等等的基本方法, 数据集还是用的上一篇的猫狗识别;基础篇还剩下几个, 后面的难度会逐步提升;欢迎…

ssm面向品牌会员的在线商城小程序

摘要 随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化,网络化和电子化。它将是直接管理面向品牌会员的在线商城小程序的最新形式。本小程序是以面向品牌会员的在线商城管理为目标,使用 java技术制…

国土安全部发布关键基础设施安全人工智能框架

美国国土安全部 (DHS) 发布建议,概述如何在关键基础设施中安全开发和部署人工智能 (AI)。 https://www.dhs.gov/news/2024/11/14/groundbreaking-framework-safe-and-secure-deployment-ai-critical-infrastructure 关键基础设施中人工智能的角色和职责框架 https:/…

五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则

一、引言 选择合适的架构模式是一个至关重要的决策,尤其是在单体架构和微服务架构之间的选择,本文将带大家认识什么是单体架构,什么是微服务架构,以及两者如何去选择,如何去转换。 二、什么是单体架构 单体架构&a…

【网络协议】【TCP】精讲TCP数据包传递的地址解析(含三次握手四次挥手图文并茂精华版)

目录 前言 1.TCP定义 1.1 什么是面向连接? 1.2 什么是可靠的通信协议? 1.3 什么是面向字节流的? 2. 数据包传递的地址解析 3. 三次握手过程详解 3.1 第一次握手 3.2 第二次握手 3.3 第三次握手 4. 四次挥手 4.1 第一次挥手 4.2 第二次挥手 4.3 第三次挥手 4.…

Win11 24H2新BUG或影响30%CPU性能,修复方法在这里

原文转载修改自(更多互联网新闻/搞机小知识): 一招提升Win11 24H2 CPU 30%性能,小BUG大影响 就在刚刚,小江在网上冲浪的时候突然发现了这么一则帖子,标题如下:基准测试(特别是 Time…

人工智能的核心思想-神经网络

神经网络原理 引言 在理解ChatGPT之前,我们需要从神经网络开始,了解最简单的“鹦鹉学舌”是如何实现的。神经网络是人工智能领域的基础,它模仿了人脑神经元的结构和功能,通过学习和训练来解决复杂的任务。本文将详细介绍神经网络…

socket连接封装

效果: class websocketMessage {constructor(params) {this.params params; // 传入的参数this.socket null;this.lockReconnect false; // 重连的锁this.socketTimer null; // 心跳this.lockTimer null; // 重连this.timeout 3000; // 发送消息this.callbac…

蓝桥杯每日真题 - 第17天

题目:(最大数字) 题目描述(13届 C&C B组D题) 题目分析: 操作规则: 1号操作:将数字加1(如果该数字为9,变为0)。 2号操作:将数字…

探索免费的Figma中文版:开启高效设计之旅

在当今数字化设计的浪潮中,Figma以其强大的云端协作功能和出色的设计能力,成为了众多设计师的心头好。而对于国内的设计师来说,能够免费使用Figma中文版更是一大福音,下面就来一起探索一下吧。 一、Figma中文版的获取途径 虽然F…

leetcode:112. 路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指没有子节点…

新160个crackme - 100-E-crackme

运行分析 需根据机器码,填写正确注册码 PE分析 C程序,32位,无壳 静态分析&动态调试 ida无法搜到字符串,使用暂停法找关键函数 首先启动ida动态调试,点击注册来到错误弹窗 点击Debugger -> Pause process 发现断…

VSCode 间距太小

setting->font family 使用:Consolas, Courier New, monospace 字体

七、电机三环控制

电机三环控制指的是,直流有刷电机三环(电流环速度环位置环)PID 控制。 1、三环PID控制原理 三环 PID 控制就是将三个 PID 控制系统(例如:电流环、速度环以及位置环)串联起来,然后对前一个系统…

【快讯】亚马逊(AMZN.US)关联方拟出售7.08万股股份,价值约1,407.69万美元

根据美国证券交易委员会(SEC)美东时间11月21日披露的文件,亚马逊(AMZN.US)关联方BEZOS EARTH FUND FOUNDATION拟于11月21日出售7.08万股普通股股份,总市值约1,407.69万美元。此外,BEZOS EARTH FUND FOUNDATION自2024年…

影响电阻可靠性的因素

一、影响电阻可靠性的因素: 影响电阻可靠性的因素有温度系数、额定功率,最大工作电压、固有噪声和电压系数 (一)温度系数 电阻的温度系数表示当温度改变1摄氏度时,电阻阻值的相对变化,单位为ppm/C.电阻温度…