RocketMQ5.0新组件Proxy

前言

RocketMQ 4.x 版本之前,一套完整的 MQ 服务包含的组件有:Namesrv、Broker、Consumer、Producer。
RocketMQ 5.0 版本之后,官方引入了一个新的组件:Proxy,它的作用是什么呢?

架构对比

RocketMQ 4.x 版本之前架构是这样的:

  • Namesrv:命名服务,充当注册中心和路由管理
  • Broker:消息存储中心
  • Consumer:消费者
  • Producer:生产者

先启动 Namesrv 再启动 Broker,Broker 会把元数据注册到 Namesrv,包括一共有哪些 Topic、Topic 下有多少队列等等。Consumer 发消息前要先从 Namesrv 拉取 Topic 的路由信息,然后轮询发送到队列,Broker 收到消息后写入磁盘持久化存储。Producer 也要从 Namesrv 拉取路由信息,再和 Broker 建立长连接拉取消息消费,消费成功后上报消费位点。
image.png
这个架构看起来没什么问题,RocketMQ 也用了这么久了,怎么到 5.0 突然要引入个 Proxy 组件呢?
顺应趋势,云原生的时代已经来了,RocketMQ 5.0 要全面拥抱云原生,现在这套架构的问题开始显现:

  • 客户端 SDK 太重,多语言重复开发,工作量大
  • Remoting 私有协议的通用性问题
  • Broker 存算一体,不利于资源调度
  • 现有 PUSH 消费模式的局限性

引入 Proxy 后,我们再来看看 RocketMQ 5.0 的架构图:
image.png
表面上看,Proxy 只是做了一个转发,在 Namesrv、Broker 和 Consumer、Producer 之间做了一层代理,但是你别小看这层代理,它带来的好处可是不少,把上面的问题全解决了。

多语言客户端SDK & 私有协议的问题
如今的 RocketMQ 早已经不是只给 Java 语言使用了,为了让 C++、Go 等其它语言也可以很方便的使用 RocketMQ,官方必须开发对应语言的客户端 SDK,这意味着要用不同的语言重复实现客户端逻辑,程序员最讨厌重复了,所以客户端要尽可能做到足够轻量,这样重复编写的代码才最少。
如果你看过 RocketMQ 4.x 的源码,你会发现客户端的逻辑太重了,比如:客户端要同时和 Namesrv 和 Broker 交互、消息队列的重平衡、消费位点的上传等等。于是,RocketMQ 5.0 把客户端的很多功能都下沉到了 Proxy,同时 5.x 的客户端统一用 gRPC 协议和 Proxy 通信,Proxy 再把协议适配成 Remoting 转发到 Broker、Namesrv。
使用 gRPC 协议的好处是:

  • RocketMQ 不用为多语言重复开发 Remoting 协议,gRPC 拿来即用
  • 云原生时代,gRPC 逐渐成为事实上的标准协议,具有更好的通用性

image.png
image.png

Broker 存算分离
Proxy 不仅承担了客户端的部分功能,还承担了原先 Broker 的部分计算任务,新架构让 Broker 更专注于消息数据的存储,实现了存储计算分离。在云原省时代,更利于资源的调度,Proxy 扩容起来更加方便。

新的 POP 消费模式
RocketMQ 4.x 的 PUSH 消费模式存在一定的局限性,本质上还是 PULL 模式,消息是靠消费者主动去拉取的,PUSH 消费模式的局限性主要体现在:

  • 队列和消费者的强绑定,消费者数量大于队列数时,增加消费者无法提高消费能力
  • 消息积压的风险变高
  • 消费者或队列数量变更,触发重平衡操作,期间无法消费消息,性能出现抖动

新的 POP 消费模式就没有这些问题,消费者可以消费所有队列里的消息,增加消费者就可以提高消费能力,不受队列数和消费者数量的限制,消费者无状态,扩容起来很方便。

部署Proxy

Proxy 有两种部署方式:

  • Local 模式下,Broker 和 Proxy 是同进程部署,只是在原有 Broker 的配置基础上新增 Proxy 的简易配置就可以运行
  • Cluster 模式下,Broker 和 Proxy 分别部署,即在原有的集群基础上,额外再部署 Proxy 即可

Local 模式部署
由于 Local 模式下 Proxy 和 Broker 是同进程部署,Proxy 本身无状态,因此主要的集群配置仍然以 Broker 为基础进行即可。
不论何种部署方式,都要先启动 Names,再启动 Broker:

$ sh mqnamesrv# 假设Namesrv地址是:192.168.1.1:9876
$ sh bin/mqbroker -n 192.168.1.1:9876 --enable-proxy

Local 模式下,因为 Proxy 和 Broker 同属一个进程,所以 Proxy 和 Broker 无需再网络通信,适合对延迟敏感、期望部署架构简单的用户。

Cluster 模式部署
在 Cluster 模式下,Broker 与 Proxy 分开部署,存储计算完全分离,Proxy 可以很好的扩容。Proxy 集群和 Broker 集群必须一一对应,可以在配置文件中指定 ClusterName。

{"rocketMQClusterName": "DefaultCluster"
}
$ sh mqnamesrv# 假设Namesrv地址是:192.168.1.1:9876
$ sh bin/mqbroker -n 192.168.1.1:9876
$ sh bin/mqproxy -n 192.168.1.1:9876

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

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

相关文章

Day22 二叉树part08 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

二叉树part08 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 235. 二叉搜索树的最近公共祖先 方法一:递归法(利用二叉搜索树性质) class Solution { public:TreeNode* lowestCommonAncestor(TreeN…

OpenCV-14图片的四则运算和图片的融合

一、图片的四则运算 1. 加法运算 通过使用API add来执行图像的加法运算 cv2.add(src1, src2)需要再其中传入两张图片。 图片就是矩阵,图片的加法运算就是矩阵的加法运算。 因此加法运算中要求两张图的shape必须是相同的。 首…

基于SpringBoot的旅游网站

目录 前言 开发环境以及工具 项目功能介绍 用户端: 管理端: 详细设计 用户端首页 登录页面 管理端页面 源码获取 前言 本项目是一个基于IDEA和Java语言开发基于SpringBoot的旅游网站。应用包含管理端和用户端等多个功能模块。 改革开放以来&am…

用HTML的原生语法实现两个div子元素在同一行中排列

代码如下&#xff1a; <div id"level1" style"display: flex;"><div id"level2-1" style"display: inline-block; padding: 10px; border: 1px solid #ccc; margin: 5px;">这是第一个元素。</div><div id"…

漏洞复现-任我行CRM系统SmsDataList接口SQL注入漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

APPnium 自动化实践 :第一步adb 连接手机

1. 下载安装 adb ,添加到环境变量。 ADB Download - Get the latest version of ADB and fastboot 2. 手机开启开发者模式 https://developer.huawei.com/consumer/cn/doc/quickApp-Guides/quickapp-open-developer-option-0000001137005543 3. adb 连接设备 【And…

国家开放大学形成性考核 统一考试 学习资料参考

试卷代号&#xff1a;11107 传感器与测试技术 参考试题 一、单项选择题&#xff08;12小题&#xff0c;每小题3分&#xff0c;共36分&#xff09; 1.以下不属于压电式传感器的特点的是&#xff08; &#xff09;。 A.体积小 B.结构简单…

Stable Diffusion模型概述

Stable Diffusion 1. Stable Diffusion能做什么&#xff1f;2. 扩散模型2.1 正向扩散2.2 反向扩散 3. 训练如何进行3.1 反向扩散3.2 Stable Diffusion模型3.3 潜在扩散模型3.4 变分自动编码器3.5 图像分辨率3.6 图像放大 4. 为什么潜在空间是可能的&#xff1f;4.1 在潜在空间中…

Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【论文精读】A Survey on Large Language Model based Autonomous Agents

A Survey on Large Language Model based Autonomous Agents 前言Abstract1 Introduction2 LLM-based Autonomous Agent Construction2.1 Agent Architecture Design2.1.1 Profiling Module2.1.2 Memory ModuleMemory StructuresMemory FormatsMemory Operations 2.1.3 Plannin…

论文阅读:通过时空生成卷积网络合成动态模式(重点论文)

原文链接 github code 介绍视频 视频序列包含丰富的动态模式&#xff0c;例如在时域中表现出平稳性的动态纹理模式&#xff0c;以及在空间或时域中表现出非平稳的动作模式。 我们证明了时空生成卷积网络可用于建模和合成动态模式。 该模型定义了视频序列上的概率分布&#xff0…

c++语言基础17-判断集合成员

题目描述 请你编写一个程序&#xff0c;判断给定的整数 n 是否存在于给定的集合中。 输入描述 有多组测试数据&#xff0c;第一行有一个整数 k&#xff0c;代表有 k 组测试数据。 每组数据第一行首先是一个正整数 m&#xff0c;表示集合中元素的数量&#xff08;1 < m &…

Python----matplotlib库

目录 plt库的字体&#xff1a; plt的操作绘图函数&#xff1a; plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number)&#xff1a; plt.axes(rect)&#xff1a; plt.subplots_adjust(): plt的读取和显示相关函数&#xff1a; plt库的基础图…

vue和react哪种框架使用范围更广

Vue和React都是非常流行的前端JavaScript框架&#xff0c;它们各自有着广泛的应用场景和支持者。选择使用哪一个框架往往取决于特定的项目需求、开发团队的熟悉程度以及生态系统的偏好。以下是这两个框架的一些主要特点&#xff0c;以帮助比较它们的使用范围&#xff1a; React…

【数据挖掘】基于 LightGBM 的系统访问风险识别(附源码)

基于 LightGBM 的系统访问风险识别 文章目录 基于 LightGBM 的系统访问风险识别一、课题来源二、任务描述三、课题背景四、数据获取分析及说明&#xff08;1&#xff09;登录https://www.datafountain.cn并获取相关数据&#xff08;2&#xff09;数据集文件说明&#xff08;3&a…

进程和计划任务

一、什么是程序 是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 二、进程 1.什么是进程 进程&#xff1a;正在运行中的程序&#xff0c;加载到内存…

Python 自学(三) 之序列的应用

目录 1. 序列的含义 2. 序列的索引 P80 3. 序列相加 P81 4. 序列乘法 P82 5. in 关键字 P83 6. 计算序列的最大值max()&#xff0c;最小值min()和长度len() P83 7. 列表的初始化 list() P85 8. 列表元素的添加&#xff0c;…

apache httpd多后缀解析漏洞复现

一、漏洞描述 Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析成php文件,利用Apache httpd这个特性,就可以绕过上传文件的白名单。 该漏洞和apache版本和php版本无关,属于用户配置不当造成的解…

vc2017编译从github网站上下载的源码

以ZLmediakit为例 1.下载软件 cmakehttps://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5-windows-x86_64.zip Microsoft Visual Studio https://my.visualstudio.com/Downloads?qvisual%20studio%202017&wt.mc_ido~msft~vscom~older-downloads …

Unity DOTS中的baking(二)Baker的触发

Unity DOTS中的baking&#xff08;二&#xff09;Baker的触发 我们知道&#xff0c;当传入Baker的authoring component的值发生变化时&#xff0c;就会触发baking。不过在有些情况下&#xff0c;component所引用的对象没有变化&#xff0c;而是对象自身内部的一些属性发生了变化…