管理完全指南:pulsar-admin / REST API / Java Admin API 三端实战)
消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载租户Tenant是 Apache Pulsar 多租户架构中的第一层资源隔离单元其下承载命名空间Namespace与主题Topic。本文基于 Apache Pulsar 2.4.0 官方管理文档结合当前仓库源码系统讲解如何使用pulsar-admin命令行、REST API 与 Java Admin API 完成租户的创建、查询、更新与删除并深入剖析其底层实现原理帮助你快速上手 Pulsar 的租户级权限与集群配额管理。本文面向的版本为 Apache Pulsar 2.4.0。文中涉及的源码路径均以当前仓库为准命令输出以实际运行环境为准。租户Pulsar 多租户体系的基石在 Pulsar 中资源组织层次为租户Tenant→ 命名空间Namespace→ 主题Topic。租户位于顶层用于实现多团队、多业务线之间的隔离。与命名空间类似租户可以通过 admin API 进行管理当前版本中一个租户有两个可配置维度Admin roles管理员角色拥有该租户管理权限的认证主体auth principal集合通常对应角色或用户标识Allowed clusters允许的集群该租户可以使用的集群列表用于跨集群场景下的资源约束。从源码结构看租户的数据模型定义在 TenantInfo 接口中核心字段即上述两个集合public interface TenantInfo { SetString getAdminRoles(); SetString getAllowedClusters(); // Builder 模式构建 TenantInfo interface Builder { Builder adminRoles(SetString adminRoles); Builder allowedClusters(SetString allowedClusters); TenantInfo build(); } }而租户管理的客户端接口同步/异步方法定义在 Tenants.java 中提供getTenants()、getTenantInfo(tenant)、createTenant(tenant, config)、updateTenant(tenant, config)、deleteTenant(tenant)以及对应的*Async异步版本这是下文三种管理方式共同依赖的抽象层。一、租户资源管理操作以下所有操作均可通过pulsar-admin、REST API 和 Java Admin API 三种方式完成下文逐一说明。1. 列出全部租户Listpulsar-admin使用list子命令$ pulsar-admin tenants list my-tenant-1 my-tenant-2命令对应的 CLI 实现位于 CmdTenants.java 的List内部类底层直接调用getAdmin().tenants().getTenants()。该接口的 Javadoc 给出了典型返回示例[my-tenant, other-tenant, third-tenant]。REST APIGET /admin/v2/tenantsBroker 侧对应的服务端实现是 v2/Tenants.java 继承的 TenantsBase.java其中getTenants()在返回前会做一次排序对列表深拷贝后sort(null)保证输出顺序稳定。Java Admin APIadmin.tenants().getTenants();2. 创建租户Createpulsar-admin使用create子命令$ pulsar-admin tenants create my-tenant创建时可通过-r/--admin-roles指定管理员角色多个角色用逗号分隔$ pulsar-admin tenants create my-tenant \ --admin-roles role1,role2,role3 $ pulsar-admin tenants create my-tenant \ -r role1除文档中的--admin-roles外从 CmdTenants.java 的Create命令源码可以看到创建操作还支持-c/--allowed-clusters参数指定允许的集群列表若省略该参数则默认授予租户访问全部现有集群的权限实现为allowedClusters getAdmin().clusters().getClusters()。REST APIPUT /admin/v2/tenants/:tenant请求体TenantInfo示例{ adminRoles: [admin1, admin2], allowedClusters: [cl1, cl2] }Broker 侧createTenant的完整校验链路见 TenantsBase.java包括校验请求者具有 super-user 权限validateSuperUserAccess()校验集群列表非空、且每个集群真实存在validateClusters(tenantInfo)global集群作为特例被放行校验租户名称合法性NamedEntity.checkName(tenant)非法名称返回 412校验租户是否已存在已存在返回 409 Conflict检查集群级maxTenants配额见下文。Java Admin APIadmin.tenants().createTenant(tenantName, tenantInfo);3. 获取租户配置Get configuration可随时获取已有租户的 配置。pulsar-admin使用get子命令并指定租户名$ pulsar-admin tenants get my-tenant { adminRoles: [ admin1, admin2 ], allowedClusters: [ cl1, cl2 ] }REST APIGET /admin/v2/tenants/:tenantBroker 侧若租户不存在返回 404Tenant does not exist。Java Admin APIadmin.tenants().getTenantInfo(tenantName);4. 删除租户Delete租户可以从 Pulsar 实例中删除。文档中的默认删除逻辑要求租户下没有活跃的命名空间否则删除失败返回 409 Conflict。pulsar-admin使用delete子命令并指定租户名$ pulsar-admin tenants delete my-tenantCLI 层还提供了-f/--force参数用于强制删除deleteTenant(tenant, force)。从 Tenants.java 的 Javadoc 可以看到默认删除会连带删除该租户下的所有命名空间与主题但若租户仍有活跃命名空间则抛ConflictException。REST APIDELETE /admin/v2/tenants/:tenant?forcefalse服务端在forcefalse时的完整删除链路见internalDeleteTenant为确认租户存在 → 校验无活跃命名空间hasActiveNamespace→ 依次清理租户的 topic 持久化数据、命名空间资源、分区主题数据、本地策略与 bundle 数据。若强制删除则先逐个调用namespaces().deleteNamespaceAsync(namespace, true)删除其下所有命名空间再走正常删除流程。需要特别注意的是强制删除受 Broker 配置开关控制。若forceDeleteTenantAllowedfalseBroker 默认值见 conf/broker.conf 中第 196 行即使传入forcetrue服务端也会返回 405 Method Not AllowedBroker doesnt allow forced deletion of tenants。Java Admin APIadmin.tenants().deleteTenant(tenantName); // 普通删除 admin.tenants().deleteTenant(tenantName, true); // 强制删除5. 更新租户配置Updatepulsar-admin使用update子命令$ pulsar-admin tenants update my-tenant与create类似update同样支持-r/--admin-roles与-c/--allowed-clusters参数。从 CmdTenants.java 的Update实现可见其增量语义未指定--admin-roles时保留现有角色未指定--allowed-clusters时保留现有集群集合。REST APIPOST /admin/v2/tenants/:tenant服务端updateTenant会先校验租户存在不存在返回 404并通过canUpdateCluster检查允许的集群集合变更是否合理再执行更新。Java Admin APIadmin.tenants().updateTenant(tenantName, tenantInfo);二、源码视角租户操作的权限与配额机制权限要求Super-user 权限从 TenantsBase.java 可以看到list / create / get / update / delete 五个 REST 端点都会先调用validateSuperUserAccess()即只有 Pulsar super-user 才能执行租户管理操作普通用户即使持有某些角色也会被拒绝403。create与update还会额外调用validatePoliciesReadOnlyAccess()在 Broker 以只读策略模式运行时如配置变更保护场景这些写操作会被拦截。配额控制maxTenantsBroker 支持通过配置maxTenants限制单个 Pulsar 集群可创建的租户总数默认值为0表示不限制见 conf/broker.conf 第 117-119 行# The maximum number of tenants that each pulsar cluster can create # This configuration is not precise control, in a concurrent scenario, the threshold will be exceeded maxTenants0服务端createTenant在写入前会检查当前租户数量若达到上限则返回 412 Precondition FailedExceed the maximum number of tenants。配置注释明确指出由于避免分布式锁开销该阈值在并发场景下并非精确控制。集群合法性校验创建与更新租户时服务端通过validateClusters()强制要求allowedClusters非空且每个集群必须已存在于集群资源中否则分别返回 412Clusters can not be empty / Clusters do not exist。global集群名Constants.GLOBAL_CLUSTER作为特殊值被放行这为跨集群数据复制场景提供了支持。三、三种管理方式对照速查操作pulsar-admin 命令REST APIJava Admin API列出租户pulsar-admin tenants listGET /admin/v2/tenantsadmin.tenants().getTenants()创建租户pulsar-admin tenants create tenant [-r roles] [-c clusters]PUT /admin/v2/tenants/:tenantadmin.tenants().createTenant(tenant, info)获取配置pulsar-admin tenants get tenantGET /admin/v2/tenants/:tenantadmin.tenants().getTenantInfo(tenant)更新配置pulsar-admin tenants update tenant [-r roles] [-c clusters]POST /admin/v2/tenants/:tenantadmin.tenants().updateTenant(tenant, info)删除租户pulsar-admin tenants delete tenant [-f]DELETE /admin/v2/tenants/:tenant?forceadmin.tenants().deleteTenant(tenant[, force])四、关键参数与注意事项--admin-roles-r逗号分隔的管理员角色列表即允许管理该租户的认证主体。创建时省略则角色集合为空更新时省略则保留原有角色。--allowed-clusters-c逗号分隔的允许集群列表。创建时省略默认授予全部现有集群更新时省略保留原集合。服务端强制要求该字段非空且集群必须存在。--force-f删除租户时强制删除其下所有命名空间与主题。注意受 Broker 配置forceDeleteTenantAllowed默认false约束未开启时强制删除会被拒绝。maxTenants集群级租户数量上限默认0表示不限制该阈值非精确控制。租户命名租户名称需通过NamedEntity.checkName合法性校验非法名称创建时返回 412。结语租户管理是 Pulsar 多租户隔离的第一道关口。通过pulsar-admin、REST API 与 Java Admin API 三种方式你可以对租户的 Admin roles 与 Allowed clusters 两个核心维度进行完整的生命周期管理。结合 TenantsBase.java 的源码可以进一步理解其背后的 super-user 权限校验、集群合法性校验、maxTenants配额以及强制删除开关等关键机制为生产环境的租户规划与权限治理提供依据。如需继续深入建议阅读同目录下的 admin-api-overview、reference-pulsar-admin 与 reference-configuration 文档并结合本文给出的源码路径进行对照学习。赞分享消息队列后端流处理【免费下载链接】pulsarApache Pulsar - distributed pub-sub messaging system项目地址https://gitcode.com/gh_mirrors/pulsar28/pulsar点击查看免费下载相关推荐Apache Pulsar 租户Tenant管理实战指南pulsar-admin、REST API 与 Java Admin APIApache Pulsar 租户Tenant管理实战指南pulsar admin、REST API 与 Java Admin API 导读 租户Tena消息队列后端流处理Apache Pulsar 租户Tenant管理实战指南pulsar-admin CLI、REST API 与 Java Admin API 全解Apache Pulsar 租户Tenant管理实战指南pulsar admin CLI、REST API 与 Java Admin API 全解 本篇技消息队列后端流处理Apache Pulsar 租户Tenant管理完全指南pulsar-admin / REST API / Java Admin 三端实战与源码解析Apache Pulsar 租户Tenant管理完全指南pulsar admin / REST API / Java Admin 三端实战与源码解析 租户消息队列后端流处理上一篇你的微信聊天记录真的安全吗用WeChatMsg实现数据自主的终极方案下一篇高效文献管理Zotero-Style插件标签显示问题完整修复指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考