一些问题
- 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 新的密码认证方式支持不好,会报:
Caused by: java.sql.SQLNonTransientConnectionException: Public Key Retrival is not allowed
异常。我们可以通过从代码自行编译的方式来升级 debezium 为更高版本解决此问题。
- 默认的 debezium 为 1.0 版本,对 MySQL 8 新的密码认证方式支持不好,会报:
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 | bin/pulsar tokens create-key-pair \ |
不过,官网没有说明采用 ES256 加密算法时 broker 端的配置方式,需要在 conf/broker.conf
里添加如下配置,不然 broker 默认使用 RS256 算法解析密钥文件。相应的,若使用其它算法也应将其配置对应算法。
1 | tokenPublicAlg=ES256 |
Functions Worker 的认证/授权
独立运行的 Functions Worker
Functions Worker 独立运行时,它有两种角色:
- 当做一个独立的 Broker 加入 Pulsar 集群
- 做为一个客户端访问 broker
所以,在 conf/functions_worker.conf
配置文件里要用配置认证、授权和客户端,相应配置如下:
1 | # As broker client |
因为 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 |
端口 6750
是 conf/functions_worker.conf
里配置的 Functions Worker 监听地址。与函数计算相关的功能有:functions
、sources
、sinks
。
小结
Apache Pulsar 是一个功能很强大的消息、函数计算、流处理系统,整体功能还在不断发展中。但还是有些小细节的问题,还不够完善……这些对于新人来说会耽误不少时间,这里记录在此,希望能让遇到类似问题的朋友可以少走些弯路、节约点时间。以后再多分享些在实际业务中应用 Pulsar 的经验。