pulsar proxy详解

news2025/4/18 13:01:10

什么是 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 的开销。

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

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

相关文章

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 前言开发…

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

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

数据库视图讲解(view)

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

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

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

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

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

【ISP】ISP pipeline(AI)

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

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

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

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

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

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

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 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勾选上,原来不能用是因为只勾选了一部分。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

文件上传漏洞原理学习

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

数字的乘阶运算

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