美文网首页
Apache Pulsar——tenants租户、namespa

Apache Pulsar——tenants租户、namespa

作者: 小波同学 | 来源:发表于2022-05-29 19:19 被阅读0次

    一、多租户

    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

    相关文章

      网友评论

          本文标题:Apache Pulsar——tenants租户、namespa

          本文链接:https://www.haomeiwen.com/subject/gtzgprtx.html