Pulsar 多租户与资源管理 是构建企业级、SaaS、云原生消息平台的核心能力。Pulsar 原生支持多租户架构,通过 Tenant(租户) → Namespace(命名空间) → Topic(主题) 的层级模型,实现 资源隔离、配额控制、权限管理 的精细化管控。
📘 Pulsar 多租户与资源管理详解
一、多租户架构概览
Tenant(租户)
└── Namespace(命名空间)
└── Topic(主题)
├── Subscription(订阅)
└── Messages
- Tenant:最高隔离单元,代表一个组织、部门或客户。
- Namespace:租户下的逻辑分组,是资源配置和权限控制的基本单位。
- Topic:消息通道,继承 Namespace 的策略。
二、创建与配置租户(Tenant)
1. 创建租户
pulsar-admin tenants create mycompany \
--admin-roles admin-user,dev-team \
--allowed-clusters cluster-a,cluster-b
参数 | 说明 |
---|---|
--admin-roles | 指定对该租户有管理权限的角色(用于 JWT 认证) |
--allowed-clusters | 允许该租户使用的集群(用于跨集群复制) |
2. 查看租户信息
pulsar-admin tenants list
pulsar-admin tenants get mycompany
3. 更新租户
pulsar-admin tenants update mycompany \
--admin-roles admin-user,dev-team,ops-team \
--allowed-clusters cluster-a,cluster-b,cluster-c
4. 删除租户
pulsar-admin tenants delete mycompany
⚠️ 删除前必须删除所有 Namespace 和 Topic。
三、创建与配置命名空间(Namespace)
Namespace 是资源管理的核心单元,支持多种策略配置。
1. 创建命名空间
pulsar-admin namespaces create mycompany/finance
命名空间名格式:
tenant/namespace
2. 配置存储配额(Storage Quota)
限制命名空间使用的最大磁盘空间。
pulsar-admin namespaces set-storage-quota mycompany/finance \
--storage-quota-limit 10G \
--persistent-messages-rate-limit=10485760 # 10MB/s
超出配额后,Producer 会被拒绝。
3. 配置消息 TTL 与保留策略
控制消息的生命周期。
# 设置消息 TTL(未消费则删除)
pulsar-admin namespaces set-retention mycompany/finance \
--time 72h \
--size 10G
--time
:消息最大保留时间--size
:未消费消息最大字节数
适用于日志、监控等场景。
4. 配置 Backlog 配额(Backlog Quota)
控制未消费消息的积压上限。
pulsar-admin namespaces set-backlog-quota mycompany/finance \
--limit 5G \
--retention-time 6h \
--policy producer_request_hold # 或 producer_exception, consumer_backlog_eviction
策略 | 说明 |
---|---|
producer_request_hold | Producer 阻塞等待 |
producer_exception | Producer 抛异常 |
consumer_backlog_eviction | 删除最老消息(FIFO) |
5. 限制订阅数
防止滥用订阅。
pulsar-admin namespaces set-subscription-dispatch-rate mycompany/finance \
--dispatch-rate-period 1 \
--rate-period-unit second \
--msg-dispatch-rate 1000 # 每秒最多 1000 条
实际订阅数限制需通过
max-subscriptions-per-topic
等参数控制。
6. 配置生产/消费速率限制
控制流量,防刷。
# 生产速率
pulsar-admin namespaces set-publish-rate mycompany/finance \
--msg-publish-rate 1000 \
--byte-publish-rate 10485760 # 10MB/s
# 消费速率
pulsar-admin namespaces set-subscription-dispatch-rate mycompany/finance \
--msg-dispatch-rate 800
7. 设置复制集群(Geo-Replication)
允许跨集群复制。
pulsar-admin namespaces set-clusters mycompany/finance \
--clusters cluster-a,cluster-b
用于灾备、多地域部署。
8. 查看命名空间所有策略
pulsar-admin namespaces policies mycompany/finance
输出示例:
{
"auth_policies": { ... },
"replication_clusters": ["cluster-a"],
"backlog_quota_map": {
"destination_storage": {
"limit": 5368709120,
"policy": "producer_request_hold"
}
},
"storage_quota": {
"limit": 10737418240,
"usage": 123456789
},
"message_ttl_in_seconds": 259200,
"subscription_dispatch_rate": {
"msgRateLimit": 800
},
"publish_rate": {
"publishThrottlingRatePerTopicInMsg": 1000
}
}
四、细粒度权限控制
Pulsar 支持 认证(Authentication) + 授权(Authorization) 的完整安全模型。
1. 认证方式(Authentication)
认证方式 | 说明 |
---|---|
✅ JWT(推荐) | 基于 Token,适合云环境 |
✅ TLS 证书 | 双向认证,安全性高 |
✅ Kerberos | 企业 AD 集成 |
✅ Athenz | Yahoo 开源,适合大规模微服务 |
✅ OAuth2 | 与第三方身份提供商集成 |
JWT 配置示例(broker.conf
)
authenticationEnabled=true
authenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderJWT
jwtPublicKey=file:///path/to/public.key
superUserRoles=admin,ops
客户端使用
token:xxx
连接。
2. 授权机制(Authorization)
控制角色对资源的访问权限。
(1) 授权粒度
粒度 | 支持 |
---|---|
Tenant | ✅ |
Namespace | ✅ |
Topic | ✅ |
Subscription | ✅ |
(2) 权限操作
操作 | 说明 |
---|---|
produce | 允许发送消息 |
consume | 允许订阅消息 |
functions | 允许部署 Pulsar Functions |
sources / sinks | 允许使用 Connectors |
read / write | 对元数据的操作 |
3. 权限管理方式
(1) 使用 pulsar-admin
命令
# 授予权限
pulsar-admin namespaces grant-permission mycompany/finance \
--role finance-team \
--actions produce,consume
# 查看权限
pulsar-admin namespaces permissions mycompany/finance
# 撤销权限
pulsar-admin namespaces revoke-permission mycompany/finance --role guest
(2) 使用 REST API
POST /admin/v2/namespaces/mycompany/finance/permissions/finance-team
Body: ["produce", "consume"]
(3) 使用 Pulsar Manager Web UI
- 登录后,进入 Namespaces → Permissions
- 图形化添加/删除角色权限
4. 权限继承规则
- Namespace 权限 → 继承给其下所有 Topic
- Topic 权限 → 覆盖 Namespace 权限(可单独设置)
- Subscription → 由订阅者角色决定
5. 超级用户(SuperUser)
在 broker.conf
中配置:
superUserRoles=admin,backup-user
超级用户拥有所有权限,不受普通授权限制。
五、典型多租户场景
场景 1:SaaS 平台
Tenant: customer-a
└── Namespace: prod (配额 10GB, 复制到 us-west)
└── Namespace: dev (配额 1GB, 仅本地)
Tenant: customer-b
└── Namespace: prod (配额 5GB, 复制到 eu-central)
- 每个客户一个 Tenant,完全隔离。
- 可设置不同 SLA 和配额。
场景 2:企业内部多部门
Tenant: mycorp
├── Namespace: finance (高安全,仅内网复制)
├── Namespace: marketing (低配额,允许外部分析)
└── Namespace: iot (高吞吐,不限速)
- 统一集群,按部门划分 Namespace。
- 财务部门限制严格,IoT 部门允许高吞吐。
六、最佳实践建议
实践 | 建议 |
---|---|
✅ 租户命名规范 | 使用公司名、项目名,如 acme-inc |
✅ 命名空间命名 | 使用环境+功能,如 finance-prod , user-events-dev |
✅ 默认配额 | 为每个新 Namespace 设置默认配额,防资源滥用 |
✅ 权限最小化 | 遵循最小权限原则,避免 * 通配符滥用 |
✅ 监控与告警 | 监控各 Namespace 的存储、吞吐、连接数,设置阈值告警 |
✅ 自动化管理 | 使用 CI/CD 或 Terraform + Pulsar Admin API 自动创建租户/命名空间 |
✅ 总结
功能 | 工具 |
---|---|
租户管理 | pulsar-admin tenants create |
命名空间策略 | set-storage-quota , set-retention , set-publish-rate 等 |
权限控制 | grant-permission , JWT, Pulsar Manager |
安全认证 | JWT, TLS, Kerberos, Athenz |
📌 一句话总结:
Pulsar 的多租户 = 租户隔离 + 资源配额 + 细粒度权限 —— 通过
pulsar-admin
或 REST API 精细配置,你可以为每个团队、客户构建独立、安全、可控的消息通道。