Apache Pulsar 代理(Proxy)部署与配置实战指南:从服务发现到客户端接入
消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载本篇技术指南围绕 Apache Pulsar 的Pulsar proxy网关代理展开介绍它在云环境、Kubernetes 等客户端无法直连 broker场景下的定位并完整演示两种 broker 发现方式的配置基于 ZooKeeper 的服务发现与基于 broker URL 的直连、TLS 配置、启动与停止操作以及如何在负载均衡前置后面接入 Pulsar 客户端。读完本文你将能够独立完成一个 Pulsar proxy 实例的配置、部署与客户端接入并理解其底层工作链路服务发现、lookup 请求处理、转发与鉴权。Pulsar proxy 是什么为什么需要一层可选网关Pulsar proxy 是 Apache Pulsar 提供的一个可选网关组件。当客户端与 broker 之间的直连不可行或不希望直连时就需要引入它。典型的场景包括在云环境中运行 Pulsarbroker 节点位于内网或私有子网客户端无法直接访问在 Kubernetes 或同类容器编排平台上运行 Pulsarbroker Pod 的地址会随调度而变化客户端不宜直连具体 Pod需要统一入口做流量分发、安全收敛或对外暴露单一服务地址。从源码结构看proxy 模块位于仓库的 pulsar-proxy 目录核心入口为ProxyServiceStartermain 方法在 ProxyServiceStarter.java内部由ProxyService、BrokerDiscoveryProvider、LookupProxyHandler、DirectProxyHandler等组件协作完成监听、发现、lookup 与转发。配置 proxy先决定如何发现 broker在使用 proxy 之前必须先在conf/proxy.conf仓库中该文件位于 conf/proxy.conf中配置集群中 broker 的地址信息。Pulsar proxy 支持两种方式直连服务发现ZooKeeper或指定 broker URL。两种方式可以互相替代但在安全性上有明显差异需要根据部署环境权衡。方式一使用服务发现连接 ZooKeeperPulsar 使用 ZooKeeper 作为服务发现组件。要让 proxy 直连 ZooKeeper在conf/proxy.conf中配置如下两项zookeeperServerszk-0,zk-1,zk-2 configurationStoreServerszk-0:2184,zk-remote:2184使用服务发现时有两点必须注意网络 ACL 必须放通proxy 需要通过 ZooKeeper 客户端端口2181连接 ZooKeeper 节点并通过配置存储configuration store客户端端口2184连接配置存储节点否则 proxy 无法获取集群的 broker 列表。安全性较低一旦网络 ACL 开放若某个 proxy 实例被攻破攻击者将获得 ZooKeeper 的完全访问权限因此官方文档明确指出it is not secure to use service discovery。版本说明该文档面向 Pulsar 2.2.1。在更新的版本中zookeeperServers已标记为废弃deprecated推荐改用metadataStoreUrl同样configurationStoreServers已废弃推荐改用configurationMetadataStoreUrl。从 ProxyConfiguration.java 的getMetadataStoreUrl()/getConfigurationMetadataStoreUrl()实现可以看到新版配置项为空时会自动回退到旧的zookeeperServers/configurationStoreServers/globalZookeeperServers保证了向后兼容。方式二使用 broker URL更安全的直连broker URL 方式更加安全proxy 不直接访问 ZooKeeper而是通过一个固定 URL 指向 broker 集群。但要注意一个重要权衡proxy 层面的授权authorization依赖 ZooKeeper 来读取鉴权策略因此如果使用 broker URL 方式需要在 proxy 层面关闭授权authorizationEnabledfalsebroker 在 proxy 转发请求之后仍会自行执行授权校验安全边界仍然由 broker 兜底。在conf/proxy.conf中配置 broker URL 如下brokerServiceURLpulsar://brokers.example.com:6650 brokerWebServiceURLhttp://brokers.example.com:8080 functionWorkerWebServiceURLhttp://function-workers.example.com:8080如果启用了 TLS则按如下方式配置brokerServiceURLTLSpulsarssl://brokers.example.com:6651 brokerWebServiceURLTLShttps://brokers.example.com:8443 functionWorkerWebServiceURLhttps://function-workers.example.com:8443几个关键配置要点URL 中的主机名应为 DNS 条目或虚拟 IPVIP该地址背后应解析到多个 broker 的真实 IP这样即使单个 broker 不可用proxy 也不会失去与 Pulsar 集群的连通性。开放相应端口与 broker 通信的端口非 TLS 为6650与8080TLS 为6651与8443必须在网络 ACL 中放通。不使用 Functions 时无需配置functionWorkerWebServiceURL该配置仅当函数工作者function workers运行在独立集群时才需要用于让 proxy 正确转发与 Functions 相关的 HTTP 请求。从 conf/proxy.conf 中的注释可以看到brokerServiceURL的定位是当服务发现被禁用时指向发现服务提供者的 URLbrokerWebServiceURL则在指定了zookeeperServers时无需配置——这从配置语义上印证了两种方式的互斥关系。启动 proxy配置完成后即可启动 proxy。进入 Pulsar 安装目录执行$ cd /path/to/pulsar/directory $ bin/pulsar proxy启动命令的实际执行逻辑在 bin/pulsar脚本会设置日志文件pulsar-proxy.log并调用org.apache.pulsar.proxy.server.ProxyServiceStarter --config $PULSAR_PROXY_CONF。默认配置文件路径为$PULSAR_HOME/conf/proxy.conf也可以通过环境变量PULSAR_PROXY_CONF覆盖参见 bin/pulsar。proxy 启动时还支持命令行直接指定元数据存储地址例如-md zk:my-zk:2181、-cms zk:my-zk:2184--metadata-store与--configuration-metadata-store这些参数会覆盖配置文件中的对应项具体见 ProxyServiceStarter.java。可以运行多个 proxy 实例官方文档明确支持在一个集群中并行运行多个 Pulsar proxy 实例配合前置负载均衡见下文实现水平扩展与高可用。启动流程从源码看大致如下ProxyServiceStarter.java先创建AuthenticationService与ProxyService再创建 JettyWebServer注册/admin、/lookup等 Servlet然后启动 proxy 服务与 Web 服务。若配置了enableProxyStatsEndpointstrue默认开启还会挂载/metrics、/proxy-stats与/status.html等统计端点便于接入 Prometheus 等监控体系。停止 proxyPulsar proxy默认在前台运行。因此停止 proxy 的方式非常简单直接终止运行 proxy 的进程即可例如在前台终端按CtrlC或对后台进程执行kill。如果希望以后台守护进程方式运行可以使用 bin/pulsar-daemon 脚本其支持的服务列表中包含proxy它会将进程 PID 写入$PULSAR_PID_DIR/pulsar-proxy.pid并管理日志轮转方便用pulsar-daemon start proxy/pulsar-daemon stop proxy进行生命周期管理。前置负载均衡把 proxy 放在 HAProxy 等前端之后由于可以运行多个 proxy 实例实践中通常将 Pulsar proxy 部署在某种负载分发前端之后例如 HAProxy 负载均衡器。这样客户端只面对一个稳定入口地址不感知底层多个 proxy 实例流量在多个 proxy 之间分发单点故障不会导致客户端失联proxy 实例可以按需扩缩容无需改动客户端配置。让 Pulsar 客户端通过 proxy 接入proxy 启动并推荐挂到负载均衡前端之后客户端只需把连接地址指向前端对外暴露的地址即可。例如假设前端使用的 DNS 地址为pulsar.cluster.default那么客户端的连接 URL 就是pulsar://pulsar.cluster.default:6650也就是说客户端的serviceUrl从直连 broker如pulsar://broker-1:6650改为指向 proxy 前端地址其余生产/消费逻辑完全不变。proxy 会在内部完成对 broker 的 lookup、连接与数据转发对客户端透明。这一转发链路在源码中由多个组件协作完成BrokerDiscoveryProvider负责维护可用 broker 列表并以轮询round-robin方式返回下一个 brokerBrokerDiscoveryProvider.javaLookupProxyHandler处理客户端的CommandLookupTopic/ 分区元数据等请求并通过信号量semaphore进行并发限流LookupProxyHandler.javaProxyConnection/DirectProxyHandler则负责 TCP 层的数据转发。此外pulsar_proxy_lookup_requests、pulsar_proxy_rejected_lookup_requests等 Prometheus 计数器见 LookupProxyHandler.java可用于观测 proxy 的 lookup 请求量与拒绝量。proxy 核心参数速查除本文档正文涉及的配置外conf/proxy.conf与 reference-configuration.md 中还列出了大量可供调优的参数这里给出与部署最相关的核心项参数说明默认值zookeeperServersZooKeeper 集群连接串逗号分隔用于服务发现空configurationStoreServers配置存储连接串逗号分隔空zookeeperSessionTimeoutMsZooKeeper 会话超时毫秒30000servicePort二进制 Protobuf 请求服务端口6650servicePortTls二进制 Protobuf TLS 请求服务端口空参考文档中为 6651webServicePortHTTPWeb 服务端口8080webServicePortTlsHTTPS 端口空authenticationEnabled是否在 proxy 层启用认证falseauthenticationProviders认证提供者类名列表逗号分隔空authorizationEnabled是否在 proxy 层强制授权broker URL 方式下应关闭falseauthorizationProvider授权提供者全限定类名org.apache.pulsar.broker.authorization.PulsarAuthorizationProvidersuperUserRoles视为超级用户的角色名列表空forwardAuthorizationCredentials是否将客户端授权凭证转发给 broker 做二次鉴权需authenticationEnabledtruefalsebrokerClientAuthenticationPlugin/brokerClientAuthenticationParametersproxy 自身与 broker 通信时使用的认证插件及参数空brokerClientTrustCertsFilePathproxy 连接 broker 时使用的受信证书路径空tlsEnabledWithBroker与 broker 通信时是否启用 TLSfalsetlsCertificateFilePath/tlsKeyFilePathproxy 服务端 TLS 证书与私钥路径空tlsTrustCertsFilePath用于校验客户端证书的受信 CA 证书路径空tlsHostnameVerificationEnabledproxy 与 broker 建立 TLS 连接时是否校验主机名falsetlsRequireTrustedClientCertOnConnect是否要求客户端证书受信否则拒绝连接falsetokenSecretKey/tokenPublicKeyToken 认证的对称密钥 / 非对称公钥支持data:;base64,xxx或file:///path空maxConcurrentInboundConnections最大并发入站连接数超出即拒绝10000maxConcurrentLookupRequests最大并发 lookup 请求数超出即报错50000enableProxyStatsEndpoints是否启用/metrics、/proxy-stats、/status.html端点truewebSocketServiceEnabled是否启用 WebSocket Servletfalse从 conf/proxy.conf 还可以看到更多进阶项如bindAddress默认0.0.0.0、advertisedAddress对外通告地址默认取InetAddress.getLocalHost().getHostname()、numIOThreads/numAcceptorThreadsNetty 线程数默认分别取2 × 可用处理器数与1、haProxyProtocolEnabled是否支持 HAProxy 协议用于真实客户端 IP 透传、HTTP 反向代理httpReverseProxyConfigs可将非 Pulsar 服务通过 proxy 暴露等均可在部署时按需调整。小结Pulsar proxy 是连接受限网络中的客户端与集群内 broker的关键桥梁。本文覆盖了它最核心的运维闭环选择 broker 发现方式ZooKeeper 服务发现 / broker URL→ 配置 TLS 与端口 → 启动与停止 → 前置负载均衡 → 客户端改指 proxy 地址。底层链路服务发现的轮询选择、lookup 限流与转发、代理层鉴权开关在 pulsar-proxy 源码中均有对应实现可查证。对于生产部署建议优先采用 broker URL 前置负载均衡 多 proxy 实例的组合以获得更小的安全暴露面与更高的可用性。关于 proxy 全部可用参数的权威清单可继续阅读仓库文档 Pulsar proxy 参考配置并结合 conf/proxy.conf 中的逐项注释进行调优。赞分享消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载相关推荐Apache Pulsar Proxy 部署与配置完全指南broker 发现、安全加固与客户端接入Apache Pulsar Proxy 部署与配置完全指南broker 发现、安全加固与客户端接入 Pulsar proxy代理是 Apache Puls消息队列后端流处理Apache Pulsar 代理Pulsar Proxy部署与配置实战指南Apache Pulsar 代理Pulsar Proxy部署与配置实战指南 本文围绕 Apache Pulsar 的 Pulsar proxy 代理网关消息队列后端流处理Apache Pulsar 网关部署指南深入解析 Pulsar Proxy 的配置、启动与客户端接入Apache Pulsar 网关部署指南深入解析 Pulsar Proxy 的配置、启动与客户端接入 Pulsar Proxy 是 Apache Pulsar消息队列后端流处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考