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

pulsar proxy详解

什么是 Pulsar Proxy?

Pulsar Proxy 是 Apache Pulsar 中的一个可选组件,作用是作为客户端与 Pulsar Brokers 之间的中间网关层。它并不是 Pulsar 核心功能必须的部分,但在特定场景下(如复杂的网络环境、安全性需求或动态集群管理)提供了极大的便利。

主要功能

  1. 统一入口点
    为客户端提供一个稳定的连接地址,避免直接暴露 Brokers 的动态地址,尤其在云环境或 Kubernetes 中 Brokers 地址可能频繁变化的情况下。

  2. 负载分发
    配合外部负载均衡器(如 HAProxy 或 Nginx),将客户端请求分发到多个 Brokers,提升系统的高可用性和性能。

  3. 安全性增强
    支持 TLS 加密和 mTLS(双向 TLS)认证,确保客户端与 Brokers 之间的通信安全。同时可以通过配置限制 Proxy 只连接到指定的 Brokers(brokerProxyAllowedHostNamesbrokerProxyAllowedIPAddresses)。

  4. 简化网络管理
    在客户端无法直接访问 Brokers 的网络环境中(比如跨 VPC 或跨数据中心),Proxy 充当桥梁,解耦客户端与 Brokers 的直接依赖。

使用场景

  • 云原生部署:客户端无需关心 Brokers 的具体位置。
  • 安全性要求高的环境:隐藏 Brokers 地址并强制加密通信。
  • 多集群架构:Proxy 可以连接到多个 Pulsar 集群并提供统一的访问接口。

多个 Proxy 之间需要相互通信吗?

标准答案:不需要

在 Apache Pulsar 的标准架构中,多个 Proxy 实例之间不需要直接通信。它们是独立运行的无状态组件,各自处理客户端请求并将其转发到 Brokers。以下是原因和机制:

1. 无状态设计
  • Proxy 不存储持久化数据,也不维护全局会话状态。每个客户端请求都是独立的,Proxy 只负责转发,不需要与其他 Proxy 共享信息。
2. 服务发现机制
  • Proxy 通过 ZooKeeper 获取 Brokers 的地址列表(或通过静态配置指定)。所有 Proxy 访问相同的服务发现数据源,因此它们的行为一致,无需互相同步。
3. 外部负载均衡
  • 多个 Proxy 实例通常由一个外部负载均衡器(如 HAProxy、Nginx 或云服务的 LB)管理。客户端连接到负载均衡器的统一入口,均衡器决定将请求分发到哪个 Proxy。Proxy 之间无需协作。
4. 高可用性与扩展性
  • Proxy 的设计目标之一是支持水平扩展。如果某个 Proxy 宕机,其他实例可以无缝接管,而不需要依赖彼此的状态。

例外情况

虽然默认情况下 Proxy 不通信,但在某些高级自定义场景中可能涉及间接“通信”:

  • 自定义插件:如果通过 Pulsar 的扩展机制在 Proxy 上实现复杂路由逻辑(比如基于客户端身份分流),可能需要外部协调服务(如 Redis)来同步状态,但这不是标准功能。
  • 运维监控:多个 Proxy 的健康状态可能通过外部工具(如 Prometheus)统一监控,但这属于管理层面,不是 Proxy 本身的通信。

部署注意事项

  • 配置一致性:所有 Proxy 的配置(比如 Brokers 地址、认证参数)需保持一致,否则可能导致路由异常。
  • 客户端访问:客户端通过负载均衡器或 DNS 连接到 Proxy 层,Proxy 之间无需感知彼此。

Proxy 的实现原理

Pulsar Proxy 的实现基于 Java 和 Netty 框架,遵循 Pulsar 的整体架构风格。它本质上是一个高效的网络代理服务器,负责在客户端与 Brokers 之间转发消息。下面是实现原理的概览:

1. 架构组成

  • 网络层:使用 Netty 实现高性能的异步 I/O 处理,支持 TCP 和 TLS 协议。
  • 协议解析:支持 Pulsar 的二进制协议(Pulsar Binary Protocol),能够解析客户端发送的生产和消费请求。
  • 路由逻辑:根据请求的目标主题(Topic)和服务发现信息,将请求转发到对应的 Broker。

2. 工作流程

以下是 Proxy 处理请求的典型流程:

  1. 客户端连接
    客户端通过配置的 Proxy 地址(通常是一个 URL,如 pulsar://proxy-host:6650)发起连接。Proxy 监听指定端口(默认 6650 或 6651 用于 TLS)。

  2. 认证与授权

    • 如果启用了认证(如 Token 或 mTLS),Proxy 会验证客户端身份。
    • Proxy 本身也需要向 Brokers 证明自己的身份(通过 proxy-to-broker 认证)。
  3. 服务发现

    • Proxy 从 ZooKeeper 查询可用 Brokers 的列表(路径通常是 /brokers),或者直接使用配置文件中的 brokerServiceURL
    • 对于特定主题,Proxy 通过主题查找(Topic Lookup)确定负责该主题的 Broker。
  4. 请求转发

    • Proxy 将客户端请求(生产消息、消费消息等)封装后转发到目标 Broker。
    • Broker 的响应会通过 Proxy 原路返回给客户端。
  5. 连接管理

    • Proxy 维护与客户端和 Brokers 的连接池,避免频繁建立新连接。
    • 支持连接复用和心跳检测,确保通信稳定。

3. 关键实现细节

  • 异步处理:基于 Netty 的 EventLoop 模型,所有 I/O 操作都是非阻塞的,保证高吞吐量。
  • 协议兼容性:Proxy 完全透明地支持 Pulsar 的二进制协议,客户端无需感知 Proxy 的存在。
  • 可扩展性:通过配置参数(如 numWorkerThreads)调整线程池大小,适应不同负载。

4. 源码视角

在 Pulsar 的源码中,Proxy 的核心实现位于 pulsar-proxy 模块:

  • ProxyService:主服务类,负责初始化网络监听器和服务发现。
  • ProxyConnection:管理单个客户端连接,处理请求和响应转发。
  • BrokerDiscoveryProvider:与 ZooKeeper 交互,动态更新 Brokers 列表。

5. 性能优化点

  • 连接池调优:通过 maxConnectionsPerBroker 等参数控制与 Brokers 的连接数。
  • TLS 开销:支持关闭 TLS 或使用硬件加速(如 OpenSSL)减少加密开销。
  • 多实例部署:配合负载均衡器扩展 Proxy 容量。

总结

Pulsar Proxy 是一个轻量、高效的网关组件,旨在简化客户端访问、增强安全性和支持动态环境。多个 Proxy 之间不需要通信,它们依靠服务发现和外部负载均衡独立运行。其实现基于 Netty 和 Pulsar 二进制协议,核心是无状态的请求转发逻辑。对于性能敏感的场景,可以通过优化部署和配置最大程度减少 Proxy 的开销。

相关文章:

pulsar proxy详解

什么是 Pulsar Proxy? Pulsar Proxy 是 Apache Pulsar 中的一个可选组件,作用是作为客户端与 Pulsar Brokers 之间的中间网关层。它并不是 Pulsar 核心功能必须的部分,但在特定场景下(如复杂的网络环境、安全性需求或动态集群管理…...

C++ Socket优化实战:提升网络应用的性能与效率

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle…...

STM32单片机入门学习——第30节: [9-6] FlyMcu串口下载STLINK Utility

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.09 STM32开发板学习——第30节: [9-6] FlyMcu串口下载&STLINK Utility 前言开发…...

Qt容器类在元对象系统中使用

解释 “QVector没有被注册到Qt的元对象系统中”这句话的意思是&#xff1a;QVector<double>这种数据类型没有被Qt的元对象系统&#xff08;Meta-Object System&#xff09;识别和管理。Qt的元对象系统是Qt框架的核心部分&#xff0c;它提供了信号与槽机制、动态属性系统…...

亮相CMEF,美的医疗全维度打造智慧医疗新生态

当下&#xff0c;医疗科技革命的浪潮正汹涌而来&#xff0c;AI技术在中国医疗器械领域迅猛发展&#xff0c;释放出巨大的潜力。 4月8日&#xff0c;在第91届中国国际医疗器械博览会&#xff08;CMEF&#xff09;上&#xff0c;2025美的医疗年度新品发布暨中国脊梁守护计划启动…...

数据库视图讲解(view)

一、为什么需要视图 二、视图的讲解 三、总结 一、为什么需要视图 视图一方面可以帮我们使用表的一部分而不是所有的表&#xff0c;另一方面也可以针对不同的用户制定不同的查询视图。 比如&#xff0c;针对一个公司的销售人员&#xff0c;我们只想给他看部分数据&#xff0c…...

TQTT_KU5P开发板教程---文件的烧写与程序固化

文档功能介绍 本文档所描述的为文件的烧写固化&#xff0c;利用spi芯片将程序固化带芯片上&#xff0c;可以让开发板在重新上电时也可以跑程序。我们所使用的芯片型号为mt25qu256-spi-x1_x2_x4.本次实验采用的在led_shift项目的基础上将流水灯程序固化到flash芯片上&#xff0c…...

进度管理__制订进度计划_资源平衡和资源平滑

本文讲解的资源平衡与资源平滑&#xff0c;是制订进度计划的工具与技术的第3项&#xff1a; 资源优化。 1. 资源平衡 资源平衡是为了在资源需求与资源供给之间取得平等&#xff0c; 根据资源制约因素对开始日期和完成日期进行调整的一种技术。 如果共享资源或关键资源只在特定…...

【ISP】ISP pipeline(AI)

ISP Pipeline 全流程概览 ISP&#xff08;Image Signal Processing&#xff0c;图像信号处理&#xff09;流程通常从原始 Bayer 数据出发&#xff0c;经过一系列模块处理&#xff0c;逐步完成图像校正和增强&#xff0c;最终生成用于显示或编码的标准图像。常见处理模块包括&a…...

C++ RAII 的用途及业务代码实现案例

C RAII 的用途及业务代码实现案例 RAII 的核心概念 RAII (Resource Acquisition Is Initialization&#xff0c;资源获取即初始化) 是 C 的核心编程范式&#xff0c;其核心思想是&#xff1a; 资源获取与对象构造绑定资源释放与对象析构绑定利用 C 对象生命周期自动管理资源…...

RVOS-2.基于NS16550a ,为os添加终端交互功能。

2.1 实验目的 为os添加uart功能&#xff0c;通过串口实现开发板与PC交互。 2.1 硬件信息 QEMU虚拟SoC含有 虚拟NS16550A设备 。 不同的地址线组合&#xff08;A2、A1、A0&#xff09;对应的读写模式和寄存器如下所示&#xff1a; 2.2 NS16550a 的初始化 线路控制寄存器&#…...

#SVA语法滴水穿石# (004)关于 ended 和 triggered 用法

在 SystemVerilog 断言(SVA, SystemVerilog Assertions)中,ended 是一个用于 序列(sequence) 的关键字,它表示某个序列(sequence)在特定时间点已经成功匹配(即“结束”)。 ended 主要用于 同步不同序列的时间关系,尤其是在多序列组合或属性(property)中需要对齐时…...

软件学报 区块链论文 截止2025年4月 录用汇总 附pdf下载

截止 2025年4月 软件学报 2024年 区块链论文 录用汇总 附pdf下载 1 Title: 基于多父链辅助工作量证明共识机制的后量子区块链系统 Authors: Key words: 区块链;后量子密码;共识机制;辅助工作量证明 Abstract: 随着量子计算机的发展,对于以传统椭圆曲线数字签名为基石的公…...

损失函数篇——针对YOLO-MIFIN模型

1. 总损失函数&#xff08;公式9&#xff09; L all λ conf L conf λ cls L cls λ loc L loc (9) L_{\text{all}} \lambda_{\text{conf}} L_{\text{conf}} \lambda_{\text{cls}} L_{\text{cls}} \lambda_{\text{loc}} L_{\text{loc}} \tag{9} Lall​λconf​Lconf​λ…...

【MySQL 数据库】增删查改操作CRUD(上)

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. CRUD 简介 2. Create -- 新增 2.1 语法 2.2 练习 3. Retrieve -- 检索 3.1 Select -- 查询 3.1.1 全列查询 3.1.2 指定列查询 3.1.3 表达式查询 3.…...

pycharm 有智能提示,但是没法自动导包,也就是alt+enter无效果

找到file->settings->editor->inspections 把python勾选上&#xff0c;原来不能用是因为只勾选了一部分。...

web前端: 什么是web?

web前端指的是利用HTML、CSS、JavaScript等各种web技术&#xff0c;做出能在浏览器上运行且用户可见的界面&#xff0c;比如网站网页、APP软件界面、游戏前端界面等。web前端主要包括web全局架构、web视觉表现和web交互效果这三部分。 WEB发展史 Web&#xff08;World Wide We…...

Java 开发中主流安全框架的详细对比,涵盖 认证、授权、加密、安全策略 等核心功能,帮助开发者根据需求选择合适的方案

以下是 Java 开发中主流安全框架的详细对比&#xff0c;涵盖 认证、授权、加密、安全策略 等核心功能&#xff0c;帮助开发者根据需求选择合适的方案&#xff1a; 1. 主流安全框架对比表 框架名称类型核心功能适用场景优点缺点官网/文档Spring Security企业级安全框架认证、授…...

Linux网络编程——TCP协议格式、可靠性分析

目录 一、前言 二、TCP协议格式 三、TCP的可靠性 TCP协议的确认应答机制 总结 四、TCP协议的缓冲区及流量控制 五、 TCP流量控制 六、TCP报文类型 标记位 一、前言 在上一篇文章中&#xff0c;我们重点介绍了UDP协议格式的一些内容。在本文中介绍的便是TCP协议格式的…...

【深度学习】Downstream Model:预训练模型的下游应用与微调技术

Downstream Model&#xff1a;预训练模型的下游应用与微调技术 文章目录 Downstream Model&#xff1a;预训练模型的下游应用与微调技术1 什么是Downstream Model&#xff08;下游模型&#xff09;2 预训练模型与下游任务的关系3 微调技术与迁移学习微调的必要性高效迁移学习参…...

C# ref out关键字 理解学习记录

ref 在传参是可以以指针的方式传递&#xff0c;而不是传参数的值 举例&#xff0c;函数返回void ,局部变量要传参后得到结果&#xff1a; ref传参前要实例化赋值&#xff0c;而函数体内不一定要赋值 out 传参前不一定要赋值&#xff0c;而函数体内一定要赋值 &#xff0c;与r…...

网络建设与运维神州数码DCN VRF虚拟路由转发 路由表隔离

作用&#xff1a; 通过在一台路由器或者三层交换机上创建多张路由表实现数据的隔离&#xff0c;常用与MPLS VPN、防火墙.... 如果发送的包在同一VRF中&#xff0c;则查表&#xff0c;查找到匹配的路由条目后&#xff0c;将指示的端口转发给下一跳 如果不在同一VRF中则丢弃。…...

Python中的AdaBoost分类器:集成方法与模型构建

引言 在机器学习领域&#xff0c;集成方法&#xff08;Ensemble Methods&#xff09;是一种通过结合多个基学习器来提高模型性能的技术。AdaBoost&#xff08;Adaptive Boosting&#xff09;是集成方法中的一种经典算法&#xff0c;它通过迭代训练多个弱分类器&#xff0c;并将…...

11:00开始面试,11:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…...

大模型本地部署系列(1) Ollama的安装与配置

一. Ollama简介 Ollama 是一个 本地化的大模型运行工具&#xff0c;可以让你在自己的电脑&#xff08;比如Mac、Windows、Linux&#xff09;上直接下载和运行各种开源的大型语言模型&#xff08;比如 LLaMA 3、Mistral、Gemma 等&#xff09;&#xff0c;而无需依赖互联网或云…...

宝塔面板数据库管理页面打不开,提示405 Not Allowed

宝塔面板数据库的管理按钮打开&#xff0c;提示405 Not Allowed 一般是php版本不匹配。 PHPMyAdmin 4.x PHP 5.2&#xff1a;安装 phpMyAdmin 4.1 PHP 5.3/5.4&#xff1a;安装 phpMyAdmin 4.4 PHP 5.5&#xff1a;安装 phpMyAdmin 4.4 PHP 5.6&#xff1a;安装 phpMyAdmin 4…...

文件上传漏洞原理学习

什么是文件上传漏洞 文件上传漏洞是指用户上传了一个可执行的脚本文件&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。“文件上传” 本身没有问题&#xff0c;有问题的是文件上传后&#xff0c;服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全&#…...

数字的乘阶运算

求数字的乘阶&#xff1a; 例如&#xff1a;6的乘阶运算&#xff1a;6*5*4*3*2*1 例如&#xff1a;3的乘阶运算&#xff1a;3*2*1 class Program{static void Main(string[] args){Console.WriteLine("请输入数字&#xff1a;");int num_01 Convert.ToInt32 (Con…...

OpenCV——图像融合

OpenCV——图像融合 一、引言1.1 图像融合分类 二、C代码实现三、效果展示3.1 标准球3.2 铝制底座 一、引言 在许多计算机视觉应用中(例如机器人运动和医学成像)&#xff0c;需要将来自多幅图像的相关信息集成到一幅图像中。这种图像融合将提供更高的可靠性、准确性和数据质量…...

基于 Spring Boot 瑞吉外卖系统开发(四)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;四&#xff09; 新增分类 新增分类UI界面&#xff0c;两个按钮分别对应两个UI界面 两个页面所需的接口都一样&#xff0c;请求参数type值不一样&#xff0c;type1为菜品分类&#xff0c;type2为套餐分类。 请求方法都为POST。…...