[rocketmq] 浅谈结构

news2024/11/15 10:18:27

rocketmq 结构

在这里插入图片描述

NameServer :几乎是无状态节点,可横向扩展,节点之间无消息同步,主要负责对源数据的管理,包括对于Topic和路由信息的管理。

每个 Broker 在启动的时候会到 NameServer 注册,Producer 在发送消息前会根据 Topic 到 NameServer 获取到 Broker 的路由信息,Consumer 也会定时获取 Topic 的路由信息。

Broker:,定时扫描 producer 链接,主要负责消息的存储、投递和查询以及服务高可用保证 ,单个 broker 与所有 nameserver 有长链接,定时将topic信息注册到nameServer

Producer:负责产生消息,通过多种负载均衡模式发送到Broker集群。从 nameserver 获取 topic 信息。启动时会在 nameserver 注册,发消息前会从 nameserver 获取信息。

Comsumer :定时从 nameserver 获取 borker 信息,从broker获取 topic 队列消息,支持push和pull两种获取消息的模式,支持集群和广播消费,提供实时的消息订阅机制。
pull主动从消息服务器拉取消息,只要批量拉取到消息用户就会启动消费过程
push 封装消息的拉取、消费进度等,将消息到达时执行的回调接口留给用户应用程序实现,首先要注册消费监听器,当监听器触发后才开始消费消息。

心跳机制

broker会每隔30秒向NameServer发送一个的心跳 ,NameServer收到一个心跳会更新对应broker的最近一次心跳事件,然后NamServer会每隔十秒运行一个任务,去检查一下各个broker的最近一次心跳的时间,如果超过120s没有收到相应broker的心跳,则判定对应的broker已经挂掉。

集群

nameserver 是无状态的,所以可横向扩展,producer 和 consumer 都是由业务端控制,所以是业务集群,rocketmq 中 broker 为保障数据不丢失,此集群为主从模式

消息存储

消息存储是由 message queue 和 commitlog 一起完成的

commitlog 存储消息,是物理存储,顺序写,随机读。
messageQueue 是逻辑存储, 文件夹的组织方式如下:topic/queue/file。存储指向 commitlog 的具体位置,会持久化,保存了指定 Topic 下的队列消息在 CommitLog 中的起始物理偏移量 offset ,消息大小 size 和消息 Tag 的 HashCode 值

一个 topic 可能有多个 message queue, offset 指一个消息在某一个 message queue 下的具体位置,通过 offset 可以定位某一个消息

同步刷盘/异步刷盘

异步刷盘:返回写成功状态时,消息可能只是写入 pagecache 中,等消息积累到一定程度会刷新到磁盘中
同步刷盘:返回写成功状态时,消息已经保存到磁盘中,消息写入 pagecache 时立刻通知刷盘线程刷盘,刷盘成功后唤醒线程,返回消息写成功。

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

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

相关文章

【UEFI实战】UEFI图形显示(从像素到字符)

GraphicsConsoleDxe 在【UEFI实战】UEFI图形显示(显示驱动)中已经介绍了如何使用显卡驱动安装的GOP来进行像素级别的显示,本文介绍的内容是对像素的包装,最终变成普通字符的输出。 模块简述 本模块将原本的GOP包装成了字符输出…

MySQL数据库——主从复制优化及读写分离

目录 主从复制优化主服务器配置优化redo log(事务日志)的刷盘策略从服务器配置优化 搭建MySQL读写分离 主从复制优化 主服务器配置优化 vim /etc/my.cnf expire_logs_days7 #设置二进制日志文件过期时间,默认值为0,表示logs不…

Vue2生命周期

Vue2生命周期 1、概念2、生命周期过程2.1 流程图示2.2 三阶段 3、钩子函数详解3.1 beforeCreate() 创建前3.2 created()创建后3.3 beforeMount() 挂载前3.4 mounted()挂载完成3.5 beforeUpdate() 更新前3.6 updated() 更新后3.7 beforeDestroy() 销毁前3.8 destroyed() 销毁完成…

在群晖上安装运行Airflow

本文是应网友 : 要求折腾的; 什么是 Airflow ? Apache Airflow 是一个开源平台,用于开发、调度和监控面向批处理的工作流。Airflow 的可扩展 Python 框架使您能够构建与几乎任何技术连接的工作流。Web 界面有助于管理工作流程的状…

RabbitMQ灵活运用,怎么理解五种消息模型

RabbitMQ灵活运用,怎么理解五种消息模型 简介一、AMQP协议二、交换机类型与默认交换机1. 交换机的四种类型2. 默认交换机 三、五种模式速览1. 一对一简单模式2. work模式(轮询)3. 发布/订阅模式4. 路由模式(自称direct模式&#x…

Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能

一.背景 由于最近的项目需要开启无障碍功能然后实现对应的功能需求,但是由于需求是需要安装后就开启辅助功能,不要在繁琐的在设置中开启辅助功能,所以需要如何在应用中开启辅助功能。 二.前提条件 将普通应用转换成系统应用,然后将系统的framework.jar包放到应用中并且可以…

vscode配置task.json和launch.json启动调试

首先说一下参考博文: 文章标题“VScode 调试教程 tasks.json和launch.json的设置(超详细)” 地址:https://blog.csdn.net/qq_59084325/article/details/125662393 官方文档太官方,其他人的文档也看过,单独…

微信小程序浏览docx,pdf等文件在线预览使用wx.openDocument

wx.downloadFile({ url: fileUrl,//pdf链接success(res) {wx.openDocument({ //打开文档filePath: res.tempFilePath,fileType: "pdf",//文档类型showMenu: true,success: function (res) {wx.showToast({title: 打开文档成功,})},fail: function (res) {wx.showToas…

Stable Diffusion使用“面部修复”时报TypeError: ‘NoneType‘ object is not subscriptable错

问题 Stable Diffusion使用“面部修复”时报TypeError: ‘NoneType’ object is not subscriptable错 解决方案 下载【detection_Resnet50_Final.pth】和【parsing_parsenet.pth】到【repositories\CodeFormer\weights\facelib】目录下,并重新运行项目即可。 ht…

Unity 基础之 URP 项目创建\项目转URP Pipline

Unity 基础之 URP 项目创建\项目转URP Pipline 目录 Unity 基础之 URP 项目创建\项目转URP Pipline 一、简单介绍 二、创建 URP 项目 三、工程项目转 URP 一、简单介绍 Unity中的一些基础知识点,方便日后查阅。 Unity游戏开发中,这里简单介绍如何创…

Methodot低代码开发教程——玩转表格增删改查分页

目录 1、背景介绍 2、连接数据源 2.1 新增数据源 2.2 填写数据源信息 3、表格数据的展示 3.1 新增查询,编写查询语句 3.2 使用表格组件 3.3 同步数据源与表格列名 4、表格的数据新增 4.1 新增查询,编写新增语句 4.2 表格配置新增一行&#xff0…

华为云专家出品《从零到一•Python图像处理入门》电子书

《华为云云享.书库》系列电子书来啦! 本系列电子书旨在帮助开发者成长,汇聚华为云内外部专家技术精华制作而成。 本书《从零到一•Python图像处理》是该系列电子书第3部。 我们在华为开发者即将到来之际,开放电子书免费下载。 点击下方链接…

JVM探究

JVM探究 请谈谈你对JVM的理解?java8虚拟机和之前的变化、更新?什么是OOM,栈溢出StackOverFlowError?怎么分析?JVM的常用调优参数有哪些?内存快照如何 抓取,怎么分析Dump文件?知道吗…

Unity VR开发教程 OpenXR+XR Interaction Toolkit(八)手指触控 Poke Interaction

文章目录 📕教程说明📕XR Poke Interactor📕与 UI 进行触控交互⭐添加 Tracked Device Graphic Raycaster 和 XR UI Input Module 让 UI 可被交互 📕与物体进行交互⭐XR Simple Interactable⭐XR Poke Filter 往期回顾&#xff1a…

【Linux进程】进程的基本概念 {PCB结构体,进程表,Linux中的task_struct,查看进程,获取进程PID,使用fork创建子进程}

一、进程的基本概念 1.1 什么是进程? 进程是计算机中正在运行的程序的实例。它是操作系统进行资源分配和调度的基本单位。每个进程都有自己的内存空间、代码、数据和执行状态。进程可以独立运行,相互之间不会干扰。操作系统可以同时运行多个进程&#…

vue表格实现一个简单的合并单元格功能

用的是vue2ant-design-vue 但是vue3或者element-ui也是同理 先上效果 需要后端的数据将相同id的放在一起 否则也会有问题 例如: this.list [{id: 1,name: 舟山接收站,...}{id: 2,name: 舟山接收站碳中和LNG,...},{id: 2,name: 舟山接收站碳中和LNG,...} ]// th…

Redis7【⑤ Redis 发布 订阅】

Redis发布和订阅 本章了解即可,命令可以不用敲。 Redis 发布和订阅(Publish/Subscribe,简称 Pub/Sub)是一种消息传递模式,用于在 Redis 中实现消息的发布和订阅。 在 Redis 中,发布者(Publi…

maven打包所有依赖,对外提供sdk.jar

maven打包所有依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compile.source>1.8</maven.compile.source><maven.compile.target>1.8</maven.compile.target></properties><…

Swin Transformer训练报错问题

1. 训练遇到报错问题 &#xff08;1&#xff09;mportError: cannot import name _pil_interp from timm.data.transforms 原因&#xff1a; timm.data.transforms里面没有_pil_interp&#xff0c;只有str_to_pil_interp、_str_to_pil_interpolation、_pil_interpolation_to_s…

rancher 节点重启无感发布

这里设置 时间 为120s &#xff0c;保证 新节点起来后&#xff0c;和 老节点并行2分钟后再剔除&#xff0c;老节点