Apache Pulsar——tenants租户、namespace命名空间、topic

一、多租户

Apache Pulsar 最初诞生于雅虎,当时就是为了解决雅虎内部各个部门之间数据的协调,所以多租户特性显得至关重用,Pulsar 从诞生之日起就考虑到多租户这一特性,并在后续的实现过程中,将其不断的完善。 多租户这一特性,使得各个部门之间可以共享同一份数据,不用单独部署独立的系统来操作数据,很好的保证了各部门间数据一致性的问题,同时简化维护成本。

在介绍 Pulsar 多租户之前,先来看一下,正常一个系统要实现一个多租户需要做哪些事情:

  • 严格的 SLAs 保证
  • 确保租户之间的隔离性
  • 允许对租户内的资源进行配额
  • 在租户内提供系统级别的安全性
  • 运维成本低,易管理

Pulsar 的多租户设计符合上述要求:

  • 使用身份验证、授权和 ACL(访问控制列表)确保其安全性
  • 为每个租户强制执行存储配额
  • 支持在运行时更改隔离机制,从而实现操作成本低和管理简单

1.1 什么是多租户

Pulsar的多租户性质主要体现在topic的URL中, 其结构如下:

persistent://tenant/namespace/topic

从URL中可以看出tenant(租户)是topic最基本的单元(比命名空间和topic名称更为基本)

1.2 Pulsar多租户的相关特性_安全性(认证和授权)

一个多租户系统需要在租户内提供系统级别的安全性,细分来讲,主要可以归类为以下两点:

  • 租户只能访问它有权限访问的 topics
  • 不允许访问它无法访问的 topics

在 Pulsar 中,多租户的安全性是通过身份验证和授权机制实现的。当 client 连接到 pulsar broker 时,broker 会使用身份验证插件来验证此客户端的身份,然后为其分配一个 string 类型的 role token。role token 主要有如下作用:

  • 判断 client 是否有对 topics 进行生产或消费消息的权限
  • 管理租户属性的配置

Pulsar 目前支持以下几种身份认证, 同时支持自定义实现自己的身份认证程序

  • TLS 客户端身份认证
  • 雅虎的身份认证系统: Athenz
  • Kerberos
  • JSON Web Token 认证

1.3 Pulsar多租户的相关特性_隔离性

隔离性主要分为如下两种:

  • 软隔离:通过磁盘配额,流量控制和限制等手段
  • 存储
  • Apache Pulsar 使用Bookkeeper来作为其存储层,bookie是Bookkeeper的实例,Bookkeeper本身就是具有I/O分离(读写分离)的特性,可以很多的做好IO隔离,提升读写的效率。
  • 同时,不同的租户可以为不同的NameSpace配置不同的存储配额,当租户内消息的大小达到了存储配额的限制,Pulsar会采取相应的措施,例如:阻止消息生成,抛异常 或丢弃数据等。

Broker

  • 每个Borker使用的内存资源都是有上限的,当Broker达到配置的CPU或内存使用的阈值后,Pulsar会迅速的将流量转移到负载较小的Broker处理。
  • 在生产和消费方面,Pulsar都可以进行流量控制,租户可以配置发送和接收的速率,避免出现一个客户端占用当前Broker的所有处理资源。
  • 硬隔离:物理资源隔离
  • Pulsar 允许将某些租户或名称空间与特定 Broker 进行隔离。这可确保这些租户或命名空间可以充分利用该特定 Broker 上的资源。

1.4 Pulsar多租户的相关操作

1.4.1 查询租户列表

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin tenants list
"public"
"pulsar"
[root@pulsar1 apache-pulsar-2.9.1]#

1.4.2 创建租户

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin tenants create my-tenant

在创建租户时,可以使用-r 或者 --admin-roles标志分配管理角色。可以用逗号分隔的列表指定多个角色。

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin tenants create my-tenant --admin-roles role1,role2,role3

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin tenants create my-tenant -r role1

1.4.3 查询租户配置信息

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin tenants get my-tenant
{
  "adminRoles" : [ ],
  "allowedClusters" : [ "pulsar-cluster" ]
}
[root@pulsar1 apache-pulsar-2.9.1]#

1.4.4 更新租户配置信息

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin tenants update -c pulsar-cluster my-tenant
[root@pulsar1 apache-pulsar-2.9.1]#

1.4.5 删除租户

  • 注意:在删除的时候,如果库下已经有名称空间,是无法删除的,需要先删除名称空间
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin tenants delete my-tenant
[root@pulsar1 apache-pulsar-2.9.1]#

二、名称空间

namespace是Pulsar中最基本的管理单元,在namespace这一层面,可以设置权限,调整副本设置,管理跨集群的消息复制,控制消息策略和执行关键操作。一个主题topic可以继承其所对应的namespace的属性,因此我们只需对namespace的属性进行设置,就可以一次性设置该namespace中所有主题topic的属性。

namespace有两种,分别是本地的namespace和全局的namespace:

  • 本地namespace——仅对定义它的集群可见。
  • 全局namespace——跨集群可见,可以是同一个数据中心的集群,也可以是跨地域中心的集群,这依赖于是否在namespace中设置了跨集群拷贝数据的功能。

虽然本地namespace和全局namespace的作用域不同,但是只要对他们进行适当的设置,都可以跨团队和跨组织共享。一旦生产者获得了namespace的写入权限,那么它就可以往namespace中的所有topic主题写入数据,如果某个主题不存在,则在生产者第一次写入数据时动态创建。

2.1 Pulsar NameSpace(名称空间) 相关操作_基础操作

2.1.1 在指定的租户下创建namespace

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces create my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#

2.1.2 查看某个租户下的namespace列表

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces list my-tenant
"my-tenant/my-ns"
[root@pulsar1 apache-pulsar-2.9.1]#

2.1.3 删除namespace

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces delete my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#

2.2Pulsar NameSpace(名称空间) 相关操作_高级操作

2.2.1 获取名称空间相关的配置策略

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces policies my-tenant/my-ns
{
  "auth_policies" : {
    "namespace_auth" : { },
    "destination_auth" : { },
    "subscription_auth_roles" : { }
  },
  "replication_clusters" : [ "pulsar-cluster" ],
  "bundles" : {
    "boundaries" : [ "0x00000000", "0x40000000", "0x80000000", "0xc0000000", "0xffffffff" ],
    "numBundles" : 4
  },
  "backlog_quota_map" : { },
  "clusterDispatchRate" : { },
  "topicDispatchRate" : { },
  "subscriptionDispatchRate" : { },
  "replicatorDispatchRate" : { },
  "clusterSubscribeRate" : { },
  "publishMaxMessageRate" : { },
  "latency_stats_sample_rate" : { },
  "deleted" : false,
  "encryption_required" : false,
  "subscription_auth_mode" : "None",
  "offload_threshold" : -1,
  "schema_auto_update_compatibility_strategy" : "Full",
  "schema_compatibility_strategy" : "UNDEFINED",
  "is_allow_auto_update_schema" : true,
  "schema_validation_enforced" : false,
  "subscription_types_enabled" : [ ],
  "properties" : { }
}
[root@pulsar1 apache-pulsar-2.9.1]#

2.2.2 配置多个集群之间的数据复制

#获取给定命名空间复制集群的列表
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces get-clusters my-tenant/my-ns
"pulsar-cluster"


# 设置复制集群
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces set-clusters my-tenant/my-ns --clusters pulsar-cluster2

2.2.3 配置 backlog quota 策略

  • 待定配额帮助Broker在某个名称空间达到某个阈值限制时限制其带宽/存储。管理员可以设置限制,并在达到限制后采取相应的行动。

  • 查看quota配置

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces get-backlog-quotas my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#
  • 进行quota设置
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces set-backlog-quota --limit 10G --limitTime 36000 --policy consumer_backlog_eviction my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#

参数说明如下:

  • limit:Bookeeper使用磁盘空间大小

  • limitTime:单位为秒,在该时间内,Bookeeper使用磁盘空间大小

  • policy:有3个可选值

    • producer_request_hold:Broker暂停运行,不再接收produce新的请求
    • producer_exception:Broker抛出异常,和客户端断开连接
    • consumer_backlog_eviction:Broker丢弃老的消息
  • 删除quota设置

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces remove-backlog-quota my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#

2.2.4 配置持久化策略

  • 持久化策略可以为给定命名空间下 topic 上的所有消息配置持久等级。

  • 查看持久化配置

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces get-persistence my-tenant/my-ns
null
[root@pulsar1 apache-pulsar-2.9.1]# 
  • 进行持久化设置
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces set-persistence --bookkeeper-ack-quorum 2 --bookkeeper-ensemble 3 --bookkeeper-write-quorum 2 --ml-mark-delete-max-rate 0 my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#

各参数含义如下:

  • bookkeeper-ack-quorum:一条entry消息需要多少个Bookeeper确认,才算produce成功。默认0
  • bookkeeper-ensemble:一个topic能使用的Bookeeper数量。默认0
  • bookkeeper-write-quorum:一条entry消息要写入多少个Bookeeper。默认0
  • ml-mark-delete-max-rate:mark-delete操作的最大速率。默认0.0

2.2.5 配置消息存活时间(TTL)

  • 获取TTL设置
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces get-message-ttl my-tenant/my-ns
null
[root@pulsar1 apache-pulsar-2.9.1]#
  • 进行TTL设置,单位为秒
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces set-message-ttl --messageTTL 600 my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#
  • 删除TTL设置
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces remove-message-ttl my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#

2.2.6 Topic的消息发送速率

  • 获取Topic的消息发送速率配置
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces get-dispatch-rate my-tenant/my-ns
null
[root@pulsar1 apache-pulsar-2.9.1]#
  • 进行Topic的消息发送速率配置
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces set-dispatch-rate --dispatch-rate-period 2 --msg-dispatch-rate 2000 --byte-dispatch-rate 1048576 my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#

参数说明如下:

  • dispatch-rate-period:进行限制的时间大小,默认为1秒
  • msg-dispatch-rate:在dispatch-rate-period时间范围内,能接收的消息数量。默认-1
  • byte-dispatch-rate:在dispatch-rate-period时间范围内,能接收的数据字节大小。默认-1

2.2.7 Topic的消息接收速率

  • 获取Topic的消息接收速率配置
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces get-subscription-dispatch-rate my-tenant/my-ns
null
[root@pulsar1 apache-pulsar-2.9.1]#
  • 进行Topic的消息接收速率配置
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces set-subscription-dispatch-rate --dispatch-rate-period 2 --msg-dispatch-rate 2000 --byte-dispatch-rate 1048576 my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#

参数说明如下:

  • dispatch-rate-period:进行限制的时间大小,默认为1秒
  • msg-dispatch-rate:在dispatch-rate-period时间范围内,能接收的消息数量。默认-1
  • byte-dispatch-rate:在dispatch-rate-period时间范围内,能接收的数据字节大小。默认-1

2.2.8 配置整个名称空间中Topic的复制集群的速率

  • 获取Topic的多个集群之间的复制速率配置
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces get-replicator-dispatch-rate my-tenant/my-ns
null
[root@pulsar1 apache-pulsar-2.9.1]#
  • 进行Topic的多个集群之间的复制速率配置
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin namespaces set-replicator-dispatch-rate --dispatch-rate-period 2 --msg-dispatch-rate 2000 --byte-dispatch-rate 1048576 my-tenant/my-ns
[root@pulsar1 apache-pulsar-2.9.1]#

参数说明如下:

  • dispatch-rate-period:进行限制的时间大小,默认为1秒
  • msg-dispatch-rate:在dispatch-rate-period时间范围内,能接收的消息数量。默认-1
  • byte-dispatch-rate:在dispatch-rate-period时间范围内,能接收的数据字节大小。默认-1

三、Topic

Topic:话题主题的含义,在一个名称空间下,可以定义多个Topic 通过Topic进行数据的分类划分,将不同的类别的消息放置到不同Topic,消费者也可以从不同Topic中获取到相关的消息,是一种更细粒度的消息划分操作,同时在Topic下可以划分为多个分片,进行分布式的存储操作,每个分片下还存在有副本操作,保证数据不丢失,当然这些分片副本更多是由bookkeeper来提供支持。

Pulsar 提供持久化与非持久化两种topic。 持久化topic是消息发布、消费的逻辑端点。 持久化topic地址的命名格式如下:

persistent://tenant/namespace/topic

非持久topic应用在仅消费实时发布消息与不需要持久化保证的应用程序。 通过这种方式,它通过删除持久消息的开销来减少消息发布延迟。 非持久化topic地址的命名格式如下:

non-persistent://tenant/namespace/topic

3.1 Pulsar Topic(主题) 相关操作_基础操作

3.1.1 创建Topic

  • 创建无分区的topic
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin topics create non-persistent://my-tenant/my-ns/my-non-partitioned-topic
[root@pulsar1 apache-pulsar-2.9.1]#
  • 创建有分区的topic
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin topics create-partitioned-topic persistent://my-tenant/my-ns/my-partitioned-topic --partitions 3
[root@pulsar1 apache-pulsar-2.9.1]#
  • 列出namespace下的所有topic
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin topics list my-tenant/my-ns
"persistent://my-tenant/my-ns/my-partitioned-topic-partition-0"
"persistent://my-tenant/my-ns/my-partitioned-topic-partition-1"
"persistent://my-tenant/my-ns/my-partitioned-topic-partition-2"
[root@pulsar1 apache-pulsar-2.9.1]#

可以看到my-non-partitioned-topic这个topic已经被删除了。这是因为一个topic被创建后,如果在创建后的60秒内不活动,就会被自动删除。可以通过如下两个参数进行控制

  • Brokerdeleteinactivetopicsenabenabled:表示是否启动自动删除,默认值为true
  • BrokerDeleteInactiveTopicsFrequencySeconds:表示不活动的时间,默认为60s

3.1.2 更新topic

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin topics update-partitioned-topic persistent://my-tenant/my-ns/my-partitioned-topic --partitions 6
[root@pulsar1 apache-pulsar-2.9.1]# 

3.1.3 删除topic

  • 删除无分区topic
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin topics delete non-persistent://my-tenant/my-ns/my-non-partitioned-topic
[root@pulsar1 apache-pulsar-2.9.1]#
  • 删除有分区topic
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin topics delete-partitioned-topic persistent://my-tenant/my-ns/my-partitioned-topic
[root@pulsar1 apache-pulsar-2.9.1]#

3.1.4 列出topic下的subscriptions

[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin topics subscriptions persistent://public/default/my-partitioned-topic
"consume-test"
[root@pulsar1 apache-pulsar-2.9.1]#

3.1.5 删除topic下的subscription

  • 需要该subscription没有active consumer
[root@pulsar1 apache-pulsar-2.9.1]# 
[root@pulsar1 apache-pulsar-2.9.1]# bin/pulsar-admin topics unsubscribe -s "consume-test"  persistent://public/my-partitioned-topic
[root@pulsar1 apache-pulsar-2.9.1]# 

3.2 Pulsar Topic(主题) 相关操作_高级操作

3.2.1 授权

pulsar-admin topics grant-permission --actions produce,consume --role application1 persistent://test- tenant/ns1/tp1

3.2.2 获取权限

pulsar-admin topics grant-permission --actions produce,consume --role application1 persistent://test- tenant/ns1/tp1

3.2.3 取消权限

pulsar-admin topics revoke-permission --role application1 persistent://test-tenant/ns1/tp1
{
    "application1": [ 
        "consume", 
        "produce"
    ]
}

参考:
https://blog.csdn.net/yy8623977/article/details/123605211

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容