
消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载Apache Pulsar 的 Admin 管理接口是运维与开发人员对 Pulsar 实例进行治理的核心入口用于管理租户tenant、命名空间namespace、主题topic等关键实体。本篇指南以 admin-api-overview.md 为骨架完整讲解pulsar-adminCLI、REST API 与 Java 客户端三种交互方式并深入到当前仓库源码剖析认证配置、TLS 参数与 Kubernetes 资源命名转换规则的真实实现。读完本文你将掌握 Admin 接口的统一架构、启用认证后的三类接入配置以及 Pulsar 对象名到 Kubernetes 标签的转换规则与自定义方法。Pulsar Admin 接口的本质一套 REST API三种接入方式Pulsar Admin 接口能够管理 Pulsar 实例中的所有重要实体包括租户、命名空间和主题等。官方文档用一句话点明了它的架构本质REST API 就是 Admin 接口本身。pulsar-adminCLI 工具和 Java 客户端底层都走 REST API如果你要自己实现 Admin 客户端也应基于 REST API 开发。也就是说三种方式只是同一套能力的三种入口最终都会转换为对 Pulsar broker 上 Admin REST API 的 HTTP 调用。从源码可以印证这一点Java 侧的 PulsarAdmin.java 接口L28 起以聚合对象的形式暴露了clusters()、brokers()、tenants()、namespaces()、topics()、bookies()、resourceQuotas()等管理对象L43-L104而 PulsarAdminBuilderImpl.java 中build()方法最终构造出 PulsarAdminImpl其内部实现正是通过 HTTP 客户端访问 broker 暴露的 REST 端点。与用户交互的三种入口分别是pulsar-adminCLI 工具位于 Pulsar 安装目录的bin文件夹下即bin/pulsar-adminHTTP 调用直接访问由 Pulsar broker 提供的 Admin REST APIJava 客户端接口通过org.apache.pulsar.client.admin.PulsarAdmin编程式访问。方式一pulsar-adminCLI 工具CLI 是最常用的管理方式适用于日常运维和脚本化操作。在你的 Pulsar 安装目录下直接执行bin/pulsar-admin不带参数运行时工具会列出所有可用的管理子命令如tenants、namespaces、topics、brokers、clusters等为某个子命令追加help可查看该命令的详细参数说明。完整的命令、flag 与描述以官方在线文档为准原文档将其指向 Pulsar 官网的 pulsar-admin 文档页本文不再赘述。方式二REST APIHTTP 调用REST API 由 Pulsar broker 提供请求路径遵循/admin/v2/...等约定。直接使用 HTTP 客户端时有两个要点307 重定向处理部分 RESTful API 可能被重定向到拥有该资源的owner broker 上进行服务响应状态码为307 Temporary Redirect。因此HTTP 调用方必须处理307重定向使用 curl 时的做法为curl命令显式指定-L选项让 curl 自动跟随重定向curl -L http://localhost:8080/admin/v2/namespaces/public/default如果不加-L当请求命中需要重定向的 API 时你会看到307响应而不是最终结果。方式三Java Admin APIJava Admin API 是面向 Java 应用的程序化管理入口。使用方式为实例化一个PulsarAdmin对象指定 Pulsar broker 的 URL并通过PulsarAdminBuilder完成配置。入口方法是 PulsarAdmin.java 中的静态工厂PulsarAdmin.builder()它返回一个PulsarAdminBuilder。单 broker 的最小示例以下是文档给出的、针对localhost的最小可用示例String url http://localhost:8080; // Pass auth-plugin class fully-qualified name if Pulsar-security enabled String authPluginClassName com.org.MyAuthPluginClass; // Pass auth-param if auth-plugin class requires it String authParams param1value1; boolean useTls false; boolean tlsAllowInsecureConnection false; String tlsTrustCertsFilePath null; PulsarAdmin admin PulsarAdmin.builder() .authentication(authPluginClassName,authParams) .serviceHttpUrl(url) .tlsTrustCertsFilePath(tlsTrustCertsFilePath) .allowTlsInsecureConnection(tlsAllowInsecureConnection) .build();多 brokermulti-host示例如果你的 Pulsar 集群有多个 broker可以像使用 Pulsar 服务地址一样在 URL 中列出多个 broker 地址Pulsar Admin 客户端会在这些地址间进行服务发现与容错String url http://localhost:8080,localhost:8081,localhost:8082; // Pass auth-plugin class fully-qualified name if Pulsar-security enabled String authPluginClassName com.org.MyAuthPluginClass; // Pass auth-param if auth-plugin class requires it String authParams param1value1; boolean useTls false; boolean tlsAllowInsecureConnection false; String tlsTrustCertsFilePath null; PulsarAdmin admin PulsarAdmin.builder() .authentication(authPluginClassName,authParams) .serviceHttpUrl(url) .tlsTrustCertsFilePath(tlsTrustCertsFilePath) .allowTlsInsecureConnection(tlsAllowInsecureConnection) .build();Builder 的完整能力与默认值源码级补充从 PulsarAdminBuilder.java 接口定义看Builder 除了上例用到的serviceHttpUrl、authentication字符串 / Map / 已构造的Authentication对象三种重载、tlsTrustCertsFilePath、allowTlsInsecureConnection之外还支持方法作用enableTlsHostnameVerification(boolean)是否校验服务器证书主机名CN/SAN遵循 RFC 2818默认关闭useKeyStoreTls(boolean)是否使用 KeyStore 类型的 TLS 配置JKS/PKCS12false 表示使用默认 PEM 类型sslProvider(String)SSL 安全提供者默认使用 JVM 默认 ProvidertlsTrustStoreType / tlsTrustStorePath / tlsTrustStorePasswordKeyStore 方式的 TrustStore 类型、路径与密码tlsCiphers(SetString)/tlsProtocols(SetString)指定 TLS 密码套件与协议版本connectionTimeout/readTimeout/requestTimeout分别设置连接、读取、请求超时单位可指定autoCertRefreshTime使用 TLS 认证时证书自动刷新的时间间隔loadConf(MapString, Object)从配置 Map 批量加载参数键名与配置文件保持一致clone()复制 Builder便于基于同一份基础配置派生多个实例见接口注释中的示例用法默认超时值定义在 PulsarAdminImpl.java 中连接超时 60 秒、读超时 60 秒、请求超时 300 秒、证书自动刷新时间 300 秒。对应地PulsarAdminBuilderImplTest.java 中验证了未设置 serviceHttpUrl 直接build()会抛出IllegalArgumentException等 Builder 的约束行为可作为编写自有接入代码时的参考。Admin 认证配置三种接口各自的接入方式如果 Pulsar 实例启用了认证Authentication上述三种 Admin 接口都需要进行相应的特殊配置。原文档用三个标签页分别给出了配置方法以下逐一展开。pulsar-admin CLIconf/client.confpulsar-admin工具的配置默认位于conf/client.conf文件在 Pulsar 安装目录中对应仓库中的conf/client.conf。原文档给出的可用参数如下名称描述默认值webServiceUrl集群的 WebREST API地址http://localhost:8080/brokerServiceUrl集群的 Pulsar 协议地址pulsar://localhost:6650/authPlugin认证插件空authParams集群的认证参数逗号分隔的字符串空useTls集群中是否强制启用 TLS 认证falsetlsAllowInsecureConnection是否接受来自客户端的不可信 TLS 证书falsetlsTrustCertsFilePath受信 TLS 证书文件路径空仓库中的实际 client.conf 文件还包含若干补充项建议一并了解tlsEnableHostnameVerificationfalse是否校验服务器主机名与证书中的 CN 一致useKeyStoreTlsfalsebroker 是否启用 KeyStore 类型的 TLS 配置tlsTrustStoreTypeJKS/tlsTrustStorePath/tlsTrustStorePasswordTrustStore 的类型、路径与密码JKS 或 PKCS12文件顶部注释给出了 TLS 场景下的示例webServiceUrlhttps://localhost:8443/、brokerServiceUrlpulsarssl://localhost:6651/、authPluginorg.apache.pulsar.client.impl.auth.AuthenticationTls以及authParamstlsCertFile:/path/to/client-cert.pem,tlsKeyFile:/path/to/client-key.pem。值得注意的是useTls并不一定需要显式配置。从 ClientConfigurationData.java 的实现看只要服务地址以pulsarssl或https开头isUseTls()会自动返回 true即地址前缀隐式开启 TLS。REST APIREST API 的细节参数、响应、示例由 Pulsar broker 暴露的 REST 文档提供原文档通过{inject: rest:...}占位符引用在线文档。在启用了认证的集群上所有 REST 请求都需要携带认证凭据如 Token 或 TLS 证书具体认证机制与pulsar-admin中的authPlugin/authParams保持一致。Java通过PulsarAdminBuilder配置Java 侧的认证与 TLS 配置通过 Builder 方法完成即上面两个示例中展示的authentication(authPluginClassName, authParams)、tlsTrustCertsFilePath(...)、allowTlsInsecureConnection(...)。其底层实现位于 PulsarAdminBuilderImpl.javaauthentication(String, String)L93-L98调用AuthenticationFactory.create(...)按插件类全限定名实例化认证插件loadConf(...)L68-L72会把配置文件中的authPluginClassName/authParams自动装配成Authentication对象L100-L116serviceHttpUrl(...)L75-L78写入ClientConfigurationData.setServiceUrl(...)多 broker 场景即在此传入逗号分隔的 URL 列表。在 Kubernetes 上运行时的资源命名规则如果你的 Pulsar Functions 或 Connector 运行在 Kubernetes 上那么无论使用哪种 Admin 接口定义 Pulsar 资源名称时都必须遵循 Kubernetes 的命名约定Kubernetes 要求名称可作为 DNS 子域名使用RFC 1123 定义。Pulsar 支持的合法字符比 Kubernetes 命名约定更宽泛——例如 Pulsar 命名空间名中可以包含冒号:等特殊字符。因此Kubernetes 运行时会把 Pulsar 对象名转换为符合 RFC 1123 的 Kubernetes 资源标签。转换规则如下截断截断至 63 个字符替换为短横线-以下字符统一替换为-非字母数字字符下划线_点.首尾补零开头和结尾的非字母数字字符替换为0。源码级验证KubernetesRuntime的标签转换实现上述规则在当前仓库中可以直接对应到 KubernetesRuntime.java第 111 行定义了private static final int maxLabelSize 63;即截断至 63 字符的实现依据第 112-114 行定义了校验 Pod 名称合法性的正则VALID_POD_NAME_REGEX第 997-1001 行将函数的namespace、tenant、name分别通过toValidLabelName(...)处理后写入 Pod 标签第 1157-1158 行的toValidLabelName正是三条规则的代码化实现先转小写把非字母数字及-、_、.之外的字符替换为-再把首尾非字母数字字符替换为0最后用left(...)截断到maxLabelSize63个字符。测试用例 KubernetesRuntimeTest.java 也对此做了断言构造一个超长的 namespace 名验证生成的标签被截断到恰好 63 个字符且特殊字符按规则被替换。命名冲突与自定义转换规则原文档特别提示如果转换过程报错例如 Pulsar 对象名过长导致命名冲突或者你想定制转换规则可以参考 functions-runtime.md 中的 Kubernetes 运行时定制章节。该章节L289-L297给出了一套扩展机制在functions-worker.yml中通过runtimeCustomizerClassName指定一个实现了org.apache.pulsar.functions.runtime.kubernetes.KubernetesManifestCustomizer接口的类即可自定义 Kubernetes manifest 的生成方式Pulsar 内置了基础实现org.apache.pulsar.functions.runtime.kubernetes.BasicKubernetesManifestCustomizer它支持通过customRuntimeOptionsJSON 文档增补jobName、jobNamespace、extractLabels、extraAnnotations、nodeSelectorLabels、tolerations、resourceRequirements等字段当runtimeCustomizerConfig对所有函数统一生效与customRuntimeOptions按函数指定同时存在且发生冲突时BasicKubernetesManifestCustomizer以customRuntimeOptions为准。另外在functions-worker.yml的kubernetesContainerFactory配置段中还可以通过customLabels指定用于节点选择的自定义标签见 functions-runtime.md这些自定义标签同样会经过toValidLabelName的规范化处理KubernetesRuntime.java L1001。小结Pulsar Admin 接口以 broker 上的 REST API 为统一底座对外提供pulsar-adminCLI、HTTP REST 和 Java 客户端三种等价的接入方式启用认证时CLI 依赖conf/client.conf中的认证与 TLS 参数Java 侧则通过PulsarAdminBuilder链式配置。若将 Functions/Connector 运行在 Kubernetes 上还需记住对象名到 RFC 1123 标签的三条转换规则63 字符截断、特殊字符转-、首尾补0并可通过KubernetesManifestCustomizer定制。理解这一层统一接口 多入口 命名规范的设计是安全、正确地管理 Pulsar 集群的基础。赞分享消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载相关推荐Apache Pulsar Admin 接口完全指南pulsar-admin CLI、REST API 与 Java 客户端Apache Pulsar Admin 接口完全指南pulsar admin CLI、REST API 与 Java 客户端 Apache Pulsar 的消息队列后端流处理Apache Pulsar Admin 接口完全指南pulsar-admin CLI、REST API 与 Java Admin API 实战Apache Pulsar Admin 接口完全指南pulsar admin CLI、REST API 与 Java Admin API 实战 导读 Apac消息队列后端流处理Apache Pulsar Admin 接口完全指南pulsar-admin CLI、REST API 与 Java Admin APIApache Pulsar Admin 接口完全指南pulsar admin CLI、REST API 与 Java Admin API 导读 Apache消息队列后端流处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考