Pulsar Proxy:理解其作用(简化客户端连接管理、增强安全性)和配置详解

Pulsar Proxy:理解其作用(简化客户端连接管理、增强安全性)和配置详解

在 Apache Pulsar 的生产部署中,Pulsar Proxy 是一个可选但非常重要的组件。它位于客户端(Producer/Consumer)和 Pulsar Broker 之间,作为反向代理网关,提供连接抽象、安全隔离和访问控制能力。

本文将深入解析 Pulsar Proxy 的核心作用、典型应用场景,并提供详细的配置与部署指南。


一、Pulsar Proxy 是什么?

Pulsar Proxy 是一个轻量级的无状态代理服务,它不参与消息的存储与路由,而是:

  • 接收来自客户端的连接请求
  • 将请求转发给后端的 Pulsar Broker
  • 透明地代理 Producer 发送、Consumer 消费、Admin 操作等所有协议

Proxy 本身不存储数据,也不管理 topic,仅负责网络层的请求转发。


二、Pulsar Proxy 的核心作用

1. 简化客户端连接管理(Connection Abstraction)

问题背景:

Pulsar 的 topic 是动态负载均衡的,可能在多个 Broker 之间迁移。客户端需要:

  • 维护与多个 Broker 的连接
  • 处理 topic 重定向(Topic Lookup)
  • 在 Broker 故障时自动重连

这增加了客户端的复杂性,尤其在多租户、大规模部署中。

Proxy 如何解决:
  • 客户端只需连接到 固定的 Proxy 地址(如 pulsar-proxy:6650
  • Proxy 负责与后端 Broker 通信,完成 topic lookup 和请求转发
  • 客户端无需感知 Broker 拓扑变化

优势

  • 客户端配置简化(只需一个连接地址)
  • 支持 DNS 轮询或负载均衡器统一接入
  • 适合云原生、Kubernetes 等动态环境

2. 增强安全性(Security Gateway)

问题背景:
  • Broker 直接暴露在公网或内部网络中,存在安全风险
  • 不同租户、应用需要不同的认证与授权策略
  • 需要集中管理 TLS、认证、ACL
Proxy 如何增强安全:
  • 统一入口:所有客户端流量经过 Proxy,Broker 可设置为内网访问
  • 集中认证:Proxy 可处理 JWT、TLS、OAuth2 等认证,Broker 只需信任 Proxy
  • ACL 控制:可在 Proxy 层实现租户隔离、IP 白名单、速率限制
  • TLS 终止:Proxy 可做 TLS 解密,减轻 Broker 负担

典型场景

  • 多租户 SaaS 平台
  • 公网接入(如移动端、IoT 设备)
  • 合规要求(如金融、医疗)

3. 支持多协议接入(Protocol Translation)

虽然 Pulsar 原生使用二进制协议(Pulsar Protocol),但 Proxy 可扩展支持:

  • Kafka 兼容模式(通过 Pulsar Kafka Proxy)
  • WebSocket 支持(用于浏览器客户端)

注意:标准 Pulsar Proxy 不直接支持 Kafka 协议,需额外部署 pulsar-kafka-proxy


4. 连接复用与资源隔离

  • Proxy 可复用与 Broker 的连接,减少 Broker 的连接压力
  • 支持按租户、命名空间限制连接数、带宽
  • 防止恶意客户端耗尽 Broker 资源

三、Pulsar Proxy 的部署架构

+----------------+     +----------------+     +------------------+
|   Producer     |     |   Consumer     |     |   Admin Client   |
+-------+--------+     +-------+--------+     +--------+---------+
        |                      |                       |
        |                      |                       |
        v                      v                       v
+-------------------------------------------------------------+
|                   Pulsar Proxy Cluster                      |
|  (可部署多个,前挂 LB: DNS, Nginx, F5, Kubernetes Service)  |
+-------------------------------------------------------------+
        |                      |                       |
        | (内部连接)           | (内部连接)            | (内部连接)
        v                      v                       v
+----------------+     +----------------+     +------------------+
|   Pulsar       |     |   Pulsar       |     |   Pulsar         |
|   Broker 1     |     |   Broker 2     |     |   Broker N       |
+----------------+     +----------------+     +------------------+
        |                      |                       |
        +----------+-----------+-----------------------+
                   |
                   v
        +--------------------------+
        |   Apache BookKeeper      |
        |      (Storage Layer)     |
        +--------------------------+

建议

  • Proxy 部署为独立集群,前挂负载均衡器(如 Nginx、Kubernetes Service)
  • Broker 不对外暴露,仅允许 Proxy 和内部服务访问

四、Pulsar Proxy 配置详解(proxy.conf

1. 基本配置

# Proxy 监听地址
serviceUrl=pulsar://broker1:6650,broker2:6650,broker3:6650
serviceUrlTls=pulsar+ssl://broker1:6651,broker2:6651,broker3:6651

# Proxy 绑定地址(对外服务)
bindAddress=0.0.0.0
advertisedAddress=pulsar-proxy-host  # 外部可见地址

# 监听端口
brokerServicePort=6650
brokerServicePortTls=6651

2. 安全配置(TLS + Authentication)

# 启用 TLS
tlsEnabled=true
tlsCertificateFilePath=/path/to/proxy.cert.pem
tlsKeyFilePath=/path/to/proxy.key-pk8.pem
tlsTrustCertsFilePath=/path/to/ca.cert.pem

# 启用认证
authenticationEnabled=true
authenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderToken

# JWT 配置
tokenPublicKey=data:;base64,ABCDEFGHIJKLMNOPQRSTUVWXYZ==

# 启用授权
authorizationEnabled=true
authorizationProvider=org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider

3. 连接与线程配置

# Netty IO 线程数
numIOThreads=8

# 工作线程数
numWorkerThreads=8

# 最大连接数
maxConcurrentIncomingRequestsPerClient=10000

4. 租户与命名空间隔离(多租户)

# 允许访问的租户(白名单)
superUserRoles=admin,proxy-admin

# 命名空间级别 ACL(需配合 Broker 配置)
forwardAuthorizationCredentials=true  # 将客户端凭证转发给 Broker

forwardAuthorizationCredentials=true 是关键,Proxy 不做鉴权决策,而是将原始凭证(如 JWT)转发给 Broker 处理。


五、启动与部署

1. 启动 Proxy

# 在每个 Proxy 节点执行
bin/pulsar proxy

日志路径:logs/pulsar-proxy-*.log

2. Kubernetes 部署示例(Deployment + Service)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pulsar-proxy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: pulsar-proxy
  template:
    metadata:
      labels:
        app: pulsar-proxy
    spec:
      containers:
      - name: proxy
        image: apachepulsar/pulsar:3.0.0
        command: ["bin/pulsar", "proxy"]
        ports:
        - containerPort: 6650
        - containerPort: 8080
        env:
        - name: PULSAR_MEM
          value: "-Xms2g -Xmx2g"
apiVersion: v1
kind: Service
metadata:
  name: pulsar-proxy
spec:
  type: LoadBalancer
  ports:
    - port: 6650
      targetPort: 6650
      name: broker
    - port: 8080
      targetPort: 8080
      name: web
  selector:
    app: pulsar-proxy

六、客户端连接配置

客户端只需连接 Proxy,无需感知 Broker:

PulsarClient client = PulsarClient.builder()
    .serviceUrl("pulsar://pulsar-proxy:6650")  // 指向 Proxy
    .authentication(AuthenticationFactory.token("token-jwt"))
    .build();

优势

  • 客户端配置简单
  • 支持 DNS 轮询:pulsar://proxy-cluster:6650
  • 可结合 Service Discovery(如 Consul、Eureka)

七、常见使用场景

场景Proxy 价值
多租户平台统一接入、租户隔离、配额控制
公网接入安全网关、TLS 终止、防攻击
Kubernetes通过 Service 统一暴露,避免 NodePort
混合云本地 Proxy 接入云端 Pulsar 集群
合规审计集中日志、访问控制、IP 白名单

八、注意事项与最佳实践

项目建议
性能开销Proxy 引入约 0.1~0.5ms 延迟,通常可忽略
高可用至少部署 2 个 Proxy 实例,前挂 LB
监控监控 Proxy 的连接数、请求率、错误率
日志开启 DEBUG 日志用于排错(生产环境关闭)
版本兼容Proxy 与 Broker 版本应保持一致

九、总结

功能说明
连接抽象客户端只需连接 Proxy,无需管理 Broker 拓扑
安全网关统一 TLS、认证、ACL,保护后端 Broker
多租户支持实现租户隔离、配额、白名单
协议扩展支持 WebSocket、Kafka 兼容(需额外组件)

是否需要部署 Proxy?

部署场景建议
内部服务调用,网络可信可选
多租户、SaaS 平台强烈推荐
公网暴露、移动端接入必须部署
Kubernetes 环境推荐(简化服务暴露)

通过合理部署 Pulsar Proxy,可显著提升系统的安全性、可维护性和可扩展性。


📌 附:常用管理命令

# 查看 Proxy 状态
bin/pulsar-admin proxies list

# 查看连接统计
bin/pulsar-admin proxies stats
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值