Apache Pulsar Tenant(租户) 和 Namespace(命名空间)详解
在 Apache Pulsar 中,Tenant(租户) 和 Namespace(命名空间) 是实现 多租户隔离、资源控制与权限管理 的核心机制。Pulsar 原生支持多租户架构,非常适合企业级平台、SaaS 系统、云消息服务等需要严格隔离不同业务或团队的场景。
🔑 核心层级结构:Tenant > Namespace > Topic
Tenant(租户)
└── Namespace(命名空间)
└── Topic(主题)
├── Persistent Topic 或 Non-Persistent Topic
└── Subscription(订阅)
示例:
persistent://mycompany/finance/payments-topic
mycompany
:Tenant(租户)finance
:Namespace(命名空间)payments-topic
:Topic(主题)
一、Tenant(租户)详解
1. 什么是 Tenant?
- Tenant 是最高级别的隔离单元,代表一个组织、部门或客户。
- 支持跨集群复制(Geo-Replication),可在多个数据中心间同步数据。
- 每个 Tenant 可以拥有多个 Namespace。
2. 租户的用途
用途 | 说明 |
---|---|
组织隔离 | 不同公司、部门、客户使用独立租户 |
安全隔离 | 权限体系基于 Tenant 粒度控制访问 |
资源配额 | 可为租户设置总存储、吞吐上限 |
跨地域复制 | 支持 tenant1 在 us-west 和 eu-central 之间复制 |
3. 租户管理命令(CLI 示例)
# 创建租户
pulsar-admin tenants create mycompany \
--admin-roles admin-user,dev-team \
--allowed-clusters cluster-a,cluster-b
# 查看租户信息
pulsar-admin tenants list
pulsar-admin tenants get mycompany
二、Namespace(命名空间)详解
1. 什么是 Namespace?
- Namespace 是租户下的逻辑分组,用于组织 Topic。
- 是 资源配置和策略管理的基本单位。
- 所有 Topic 必须归属于某个 Namespace。
2. 命名空间的核心功能
功能 | 说明 |
---|---|
✅ 资源配额管理 | 设置存储配额、生产/消费速率限制 |
✅ 消息保留策略 | TTL、消息保留时间、延迟重试策略 |
✅ 复制策略 | 允许复制到哪些集群(如仅限本地) |
✅ 权限控制 | 设置角色对 Namespace 的读写权限 |
✅ 自动创建 Topic | 可配置是否允许自动创建 Topic |
3. 命名空间操作(CLI 示例)
# 创建命名空间
pulsar-admin namespaces create mycompany/finance
# 设置存储配额(例如:10GB)
pulsar-admin namespaces set-storage-quota mycompany/finance \
--storage-quota-limit 10G \
--retention-time 72h \
--retention-size 10G
# 设置生产/消费速率限制(例如:每秒最多 1000 条消息)
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
# 设置权限
pulsar-admin namespaces grant-permission mycompany/finance \
--role finance-team \
--actions produce,consume
# 查看命名空间配置
pulsar-admin namespaces policies mycompany/finance
三、多租户隔离机制详解
1. 资源隔离维度
隔离维度 | 实现方式 | 说明 |
---|---|---|
存储配额 | set-storage-quota | 控制 Namespace 使用的 BookKeeper 存储上限,防止某个租户耗尽磁盘 |
生产速率限制 | set-publish-rate | 限制 Producer 每秒发送的消息数或字节数 |
消费速率限制 | set-dispatch-rate | 限制 Consumer 接收消息的速度,防止单个消费者拖慢 Broker |
连接数限制 | max-connections | 限制 Producer/Consumer 连接总数 |
Topic 数量限制 | max-topics-per-namespace | 防止滥用自动创建 Topic |
⚠️ 注意:这些配额由 Broker 实时监控,超出后会拒绝请求或限流。
2. 数据隔离与复制控制
特性 | 说明 |
---|---|
跨集群复制(Geo-Replication) | 可为 Namespace 设置允许复制的集群列表:pulsar-admin namespaces set-clusters mycompany/finance --clusters us-west,eu-central |
复制白名单 | 防止敏感数据(如财务)复制到不安全区域 |
非持久化 Topic 支持 | 适用于低延迟、临时通信场景,不占用 BookKeeper 存储 |
3. 权限与安全隔离
Pulsar 使用基于 角色(Role) 的访问控制(RBAC),支持细粒度权限管理。
支持的操作权限:
权限 | 说明 |
---|---|
produce | 允许向 Topic 发送消息 |
consume | 允许从 Topic 订阅消息 |
functions | 允许部署 Pulsar Functions |
sources / sinks | 允许使用 Connectors |
read / write | 对命名空间元数据的操作权限 |
权限管理命令示例:
# 授予 finance-team 在 finance 命名空间的生产消费权限
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
支持的身份认证方式:
- TLS 证书
- JWT(常用)
- OAuth2
- Kerberos(企业集成)
示例:用户
finance-user@mycompany.com
持有 JWT Token,只能访问mycompany/finance/*
主题。
四、典型多租户应用场景
场景 1:SaaS 平台(多个客户)
Tenant: customer-a
└── Namespace: production
└── Namespace: staging
Tenant: customer-b
└── Namespace: prod
└── Namespace: dev
- 每个客户一个 Tenant,完全隔离。
- 可设置不同的 SLA、配额、复制策略。
场景 2:企业内部多部门
Tenant: mycorp
├── Namespace: finance (高安全,仅内网复制)
├── Namespace: marketing (低配额,允许外部分析)
└── Namespace: iot (高吞吐,不限速)
- 统一集群,按部门划分 Namespace。
- 财务部门限制严格,IoT 部门允许高吞吐。
场景 3:开发/测试/生产环境隔离
Tenant: myproject
├── Namespace: prod (严格权限,备份)
├── Namespace: staging (受限访问)
└── Namespace: dev (开放权限,自动创建 Topic)
五、最佳实践建议
实践 | 建议 |
---|---|
📌 租户命名规范 | 使用公司名、项目名,如 acme-inc , project-x |
📌 命名空间命名 | 使用环境+功能,如 finance-prod , user-events-dev |
📌 默认配额 | 为每个新 Namespace 设置默认配额,防资源滥用 |
📌 权限最小化 | 遵循最小权限原则,避免 * 通配符滥用 |
📌 监控与告警 | 监控各 Namespace 的存储、吞吐、连接数,设置阈值告警 |
📌 自动化管理 | 使用 CI/CD 或 Terraform + Pulsar Admin API 自动创建租户/命名空间 |
六、可视化架构图(文字描述)
+-----------------------------+
| Tenant: acme-inc |
| Admin: acme-admin@acme.com |
| Clusters: us-west, eu-central|
+-----------------------------+
|
v
+----------------------------+
| Namespace: finance |
| - Quota: 50GB storage |
| - Rate: 500 msg/s publish |
| - Replication: us-west only|
| - Roles: fin-team (produce/consume) |
+----------------------------+
|
v
[Topic: payments]
[Topic: invoices]
+----------------------------+
| Namespace: marketing |
| - Quota: 10GB |
| - Rate: 2000 msg/s |
| - Replication: all clusters|
| - Roles: mkt-team (produce), analyst (consume) |
+----------------------------+
|
v
[Topic: user-clicks]
[Topic: campaigns]
七、总结:Pulsar 多租户优势
特性 | 说明 |
---|---|
✅ 原生多租户支持 | 不是模拟,而是架构级设计 |
✅ 精细资源控制 | 存储、速率、连接数均可配额 |
✅ 安全权限模型 | RBAC + JWT/TLS,支持企业级认证 |
✅ 跨地域复制控制 | 敏感数据不出区 |
✅ 适合云原生 | 与 Kubernetes、Service Mesh 集成良好 |
📌 一句话总结:
Tenant 是“谁在用”,Namespace 是“怎么用” —— 通过两者组合,Pulsar 实现了真正的企业级多租户消息平台。