Pulsar 2.7:集群,认证、授权,函数计算,CDC

一些问题

  • Apache Pulsar 2.7.1
    • 当 Functions Worker 独立运行时,客户端需要直接 Worker,现在的 Pulsar 还不能通过 broker 找到 Worker 地址。社区已有相应的 PR #6425 修复
    • 当配置了 Pulsar 集群配置了认证/授权,且 connector 使用进程模式运行时,现在 connector 未继承 Functions Worker 的认证配置,造成 connector 将以匿名用户的方式连接 broker。解决方案有(现在社区也有相应的 PR #8668 修复此问题):
      1. 禁用 Pulsar 集群的认证/授权
      2. 设置 broker 的 anonymousUserRole= 为配置的某个用户。
  • debezium MySQL 1.4.2 for Apache Pulsar CDC
    • 默认的 debezium 为 1.0 版本,对 MySQL 8 新的密码认证方式支持不好,会报: Caused by: java.sql.SQLNonTransientConnectionException: Public Key Retrival is not allowed 异常。我们可以通过从代码自行编译的方式来升级 debezium 为更高版本解决此问题。

Pulsar 集群安装

按官网文档安装即可: https://pulsar.apache.org/docs/en/deploy-bare-metal/

对于 Functions Woker,采用独立运行的方式,安装文档见:https://pulsar.apache.org/docs/en/functions-worker/#run-functions-worker-separately

认证/授权

Broker 的认证/授权

Pulsar 支持多种认证/授权机制,本文采用 JWT Token 的方式,设置文档见: https://pulsar.apache.org/docs/en/security-jwt/

JWT Token 支持两种签名模式:对称与非对称,非对称相对来说更安全。默认的非对称加密使用的 RS256 加密方式,相对 ES256 来说,ES256 生成的 token 在想同安全强度下生成的字符串更短,同时计算速度也更快。同过如下命令可生成 ES256 密钥对:

1
2
3
4
bin/pulsar tokens create-key-pair \
--signature-algorithm ES256 \
--output-private-key conf/fruits-private.key \
--output-public-key conf/fruits-public.key

不过,官网没有说明采用 ES256 加密算法时 broker 端的配置方式,需要在 conf/broker.conf 里添加如下配置,不然 broker 默认使用 RS256 算法解析密钥文件。相应的,若使用其它算法也应将其配置对应算法。

1
tokenPublicAlg=ES256

Functions Worker 的认证/授权

独立运行的 Functions Worker

Functions Worker 独立运行时,它有两种角色:

  1. 当做一个独立的 Broker 加入 Pulsar 集群
  2. 做为一个客户端访问 broker

所以,在 conf/functions_worker.conf 配置文件里要用配置认证、授权和客户端,相应配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# As broker client
brokerClientAuthenticationEnabled: true
brokerClientAuthenticationPlugin: org.apache.pulsar.client.impl.auth.AuthenticationToken
brokerClientAuthenticationParameters: file:///data/local/pulsar/conf/token-fruits.jwt

# As broker
authenticationEnabled: true
authorizationEnabled: true
authenticationProviders: [ "org.apache.pulsar.broker.authentication.AuthenticationProviderToken" ]
authorizationProvider: org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider
superUserRoles:
- fruits
properties:
tokenPublicKey: file:///data/local/pulsar/conf/fruits-public.key
tokenPublicAlg: ES256

因为 Functions Worker 作为一个 Broker 独立运行,同时使用了 ES256 算法进行 JWT 签名,所以也需要配置 tokenPublicAlg 选项。

客户端访问

对于独立运行的 Functions Worker,客户端需要直连 Worker,当前 Pulsar 还不能通过 broker 获取 functions worker 的地址,所以与函数计算相关的功能都需要直连 Functions Worker。如:

1
bin/pulsar-admin --admin-url http://node1:6750 functions list

端口 6750conf/functions_worker.conf 里配置的 Functions Worker 监听地址。与函数计算相关的功能有:functionssourcessinks

小结

Apache Pulsar 是一个功能很强大的消息、函数计算、流处理系统,整体功能还在不断发展中。但还是有些小细节的问题,还不够完善……这些对于新人来说会耽误不少时间,这里记录在此,希望能让遇到类似问题的朋友可以少走些弯路、节约点时间。以后再多分享些在实际业务中应用 Pulsar 的经验。

分享到