一些问题
Apache Pulsar 2.7.1
当 Functions Worker 独立运行时,客户端需要直接 Worker,现在的 Pulsar 还不能通过 broker 找到 Worker 地址。社区已有相应的 PR #6425 修复
当配置了 Pulsar 集群配置了认证/授权,且 connector 使用进程模式运行时,现在 connector 未继承 Functions Worker 的认证配置,造成 connector 将以匿名用户的方式连接 broker。解决方案有(现在社区也有相应的 PR #8668:
禁用 Pulsar 集群的认证/授权
设置 broker 的 `anonymousUserRole=` 为配置的某个用户。
debezium MySQL 1.4.2 for Apache Pulsar CDC
默认的 debezium 为 1.0 版本,对 MySQL 8 新的密码认证方式支持不好,会报异常。我们可以通过从代码自行编译的方式来升级 debezium 为更高版本解决此问题。
Caused by: java.sql.SQLNonTransientConnectionException: Public Key Retrival is not allowed
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 密钥对:
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 算法解析密钥文件。相应的,若使用其它算法也应将其配置对应算法。
tokenPublicAlg=ES256
Functions Worker 的认证/授权
独立运行的 Functions Worker
Functions Worker 独立运行时,它有两种角色:
当做一个独立的 Broker 加入 Pulsar 集群
做为一个客户端访问 broker
所以,在 `conf/functions_worker.conf` 配置文件里要用配置认证、授权和客户端,相应配置如下:
# As broker clientbrokerClientAuthenticationEnabled: truebrokerClientAuthenticationPlugin: org.apache.pulsar.client.impl.auth.AuthenticationTokenbrokerClientAuthenticationParameters: file:///data/local/pulsar/conf/token-fruits.jwt# As brokerauthenticationEnabled: trueauthorizationEnabled: trueauthenticationProviders: [ "org.apache.pulsar.broker.authentication.AuthenticationProviderToken" ]authorizationProvider: org.apache.pulsar.broker.authorization.PulsarAuthorizationProvidersuperUserRoles:- fruitsproperties:tokenPublicKey: file:///data/local/pulsar/conf/fruits-public.keytokenPublicAlg: ES256
因为 Functions Worker 作为一个 Broker 独立运行,同时使用了 ES256 算法进行 JWT 签名,所以也需要配置 `tokenPublicAlg` 选项。
客户端访问
对于独立运行的 Functions Worker,客户端需要直连 Worker,当前 Pulsar 还不能通过 broker 获取 functions worker 的地址,所以与函数计算相关的功能都需要直连 Functions Worker。如:
bin/pulsar-admin --admin-url http://node1:6750 functions list
端口 `6750` 是 `conf/functions_worker.conf` 里配置的 Functions Worker 监听地址。与函数计算相关的功能有:`functions`、`sources`、`sinks`。
小结
Apache Pulsar 是一个功能很强大的消息、函数计算、流处理系统,整体功能还在不断发展中。但还是有些小细节的问题,还不够完善……这些对于新人来说会耽误不少时间,这里记录在此,希望能让遇到类似问题的朋友可以少走些弯路、节约点时间。以后再多分享些在实际业务中应用 Pulsar 的经验。




