Pulsar代理是一个可选的网关,你可以在Pulsar集群中的brokers之前运行它们。 建议在客户端和Pulsar broker之间的连接不可行,不便捷或两者兼而有之时运行Pulsar代理,例如在云环境中运行Pulsar或Kubernetes或类似的平台。

配置 Pulsar proxy

Proxy 有办法来找到集群中 broker 的地址。 你可以通过配置代理来直接连接到服务发现,或者在配置中指定broker URL。

选项 1:使用服务发现

Pulsar uses ZooKeeper for service discovery. To connect the proxy to ZooKeeper, specify the following in conf/proxy.conf.

  1. zookeeperServers=zk-0,zk-1,zk-2
  2. configurationStoreServers=zk-0:2184,zk-remote:2184

如果使用服务发现,网络ACL必须允许代理与ZooKeeper客户端端口(通常为2181) 及配置存储客户端端口(默认为2184) 上的ZooKeeper节点通信。 打开网络ACLs意味着如果有人破坏了代理,那么他们可以完全访问ZooKeeper。 因此,使用 broker URLs 配置代理更安全。

选项2:使用broker URLs

配置代理的更安全的方法是指定连接到brokers的URL。

代理上的授权需要访问ZooKeeper,所以如果您使用 broker URLs连接到brokers,就应该禁用代理级别授权。 代理转发请求之后,Brokers仍然会授权请求。

您可以在 conf/proxy.conf中配置broker URLs,如下所示。

  1. brokerServiceURL=pulsar://brokers.example.com:6650
  2. brokerWebServiceURL=http://brokers.example.com:8080
  3. functionWorkerWebServiceURL=http://function-workers.example.com:8080

如果使用TLS,示例如下:

  1. brokerServiceURLTLS=pulsar+ssl://brokers.example.com:6651
  2. brokerWebServiceURLTLS=https://brokers.example.com:8443
  3. functionWorkerWebServiceURL=https://function-workers.example.com:8443

提供的URLs中的主机名应该是指向多个 broker 的DNS条目,或由多个broker 的IP地址支持的虚拟IP,以便在单个 broker 不可用时 ,代理不会失去与 Pulsar 群集的连接。

连接到 brokers 的端口(6650 和 8080,或者在使用TLS的情况下,6651 和 8443 )应该在网络ACL中打开。

注意,如果不使用 functions,则不需要配置functionWorkerWebServiceURL

启动代理

To start the proxy:

  1. $ cd /path/to/pulsar/directory
  2. $ bin/pulsar proxy

You can run as many instances of the Pulsar proxy in a cluster as you would like.

Stopping the proxy

The Pulsar proxy runs by default in the foreground. To stop the proxy, simply stop the process in which it’s running.

Proxy frontends

We recommend running the Pulsar proxy behind some kind of load-distributing frontend, such as an HAProxy load balancer.

Using Pulsar clients with the proxy

Once your Pulsar proxy is up and running, preferably behind a load-distributing frontend, clients can connect to the proxy via whichever address is used by the frontend. If the address were the DNS address pulsar.cluster.default, for example, then the connection URL for clients would be pulsar://pulsar.cluster.default:6650.

Proxy configuration

The Pulsar proxy can be configured using the proxy.conf configuration file. The following parameters are available in that file:

NameDescription默认值
zookeeperServersZooKeeper quorum 连接字符串(以逗号分隔的列表)
configurationStoreServers配置存储连接字符串(以逗号分隔的列表)
zookeeperSessionTimeoutMsZooKeeper会话超时(以毫秒为单位)30000
servicePort用于服务器二进制Protobuf请求的端口6650
servicePortTls用于服务器二进制Protobuf TLS请求的端口6651
statusFilePath在响应服务发现健康检查时,用于确定代理实例的轮换状态的文件的路径
authenticationEnabled是否为Pulsar代理启用身份验证false
authenticationProviders身份验证提供者名称列表(以逗号分隔的类名列表)
authorizationEnabled是否由Pulsar代理强制执行授权false
authorizationProvider授权提供程序的完全限定类名org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider
brokerClientAuthenticationPluginPulsar代理使用的身份验证插件,用于对Pulsar brokers进行身份验证
brokerClientAuthenticationParametersPulsar代理用于对Pulsar Brokers进行身份验证的参数
brokerClientTrustCertsFilePathPulsar代理用于对Pulsar Brokers进行身份验证的可信证书的路径
superUserRoles“超级用户”的角色名,这意味着它们将能够执行所有管理
forwardAuthorizationCredentialsWhether client authorization credentials are forwared to the broker for re-authorization. Authentication must be enabled via authenticationEnabled=true for this to take effect.false
maxConcurrentInboundConnectionsMax concurrent inbound connections. The proxy will reject requests beyond that.10000
maxConcurrentLookupRequestsMax concurrent outbound connections. The proxy will error out requests beyond that.50000
tlsEnabledInProxy是否为代理启用TLSfalse
tlsEnabledWithBroker与Pulsar Brokers通信时是否启用TLSfalse
tlsCertificateFilePathTLS证书文件的路径
tlsKeyFilePathTLS私钥文件的路径
tlsTrustCertsFilePath受信任的TLS证书pem文件的路径
tlsHostnameVerificationEnabled当代理与brokers建立TLS连接时是否验证主机名false
tlsRequireTrustedClientCertOnConnectWhether client certificates are required for TLS. Connections are rejected if the client certificate isn’t trusted.false