由于blog各种垃圾评论太多,而且本人审核评论周期较长,所以懒得管理评论了,就把评论功能关闭,有问题可以直接qq骚扰我

Pulsar 主要功能介绍及使用

中间件 西门飞冰 2984℃

多租户模式

什么是多租户

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

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

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

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

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

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

persistent://tenant/namespace/topic

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

image-20221013180755848

Pulsar多租户特性_安全性

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

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

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

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

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

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

image-20221013181129213

Pulsar多租户特性_隔离性

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

1、硬隔离: 物理资源隔离

  • Pulsar 允许将某些租户或名称空间与特定 Broker 进行隔离。这可确保这些租户或命名空间可以充分利 用该特定 Broker 上的资源。

2、软隔离: 通过磁盘配额,流量控制和限制等手段

存储:

Apache Pulsar 使用Bookkeeper来作为其存储层, bookie是Bookkeeper的实例, Bookkeeper本身就是具有I/O分离(读写分 离)的特性,可以很多的做好IO隔离, 提升读写的效率

同时, 不同的租户可以为不同的NameSpace配置不同的存储配额, 当租户内消息的大小达到了存储配额的限制, Pulsar会 采取相应的措施, 例如: 阻止消息生成, 抛异常 或丢弃数据等

Broker:

每个Borker使用的内存资源都是有上限的, 当Broker达到配置的CPU或内存使用的阈值后, Pulsar会迅速的将流量转移到 负载较小的Broker处理

在生产和消费方面, Pulsar都可以进行流量控制,租户可以配置发送和接收的速率,避免出现一个客户端占用当前Broker 的所有处理资源

Pulsar 多租户的相关操作

1、获取租户列表

./pulsar-admin tenants list

2、创建租户

./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

3、获取配置

]# ./pulsar-admin tenants get my-tenant
{
  "adminRoles" : [ ],
  "allowedClusters" : [ "pulsar-cluster" ]
}

4、更新配置:基于update可以更新租户的相关配置信息

./pulsar-admin tenants update my-tenant

5、删除租户:注意,在删除的时候,如果租户下有名称空间,是无法删除的,需要先删除名称空间

./pulsar-admin tenants delete my-tenant

pulsar 名称空间

什么是名称空间

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

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

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

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

命名空间的基础操作

1、在指定的租户下创建名称空间

./pulsar-admin namespaces create test-tenant/test-namespace

2、获取所有的名称空间列表

./pulsar-admin namespaces list test-tenant

3、删除名称空间

./pulsar-admin namespaces delete test-tenant/test-namespace

命名空间的高级操作

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

]# ./pulsar-admin namespaces policies test-tenant/test-namespace
{
  "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" : { }
}

2、配置复制集群

2.1- 设置复制集群: 
./pulsar-admin namespaces set-clusters test-tenant/ns1 --clusters cl2
2.2- 获取给定命名空间复制集群的列表 
./pulsar-admin namespaces get-clusters test-tenant/ns1

3、配置backlog quota策略

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

(1)设置backlog quota策略

# 如下操作含义为一个小时最多处理10G数据
./pulsar-admin namespaces set-backlog-quota --limit 10G --limitTime 36000 --policy producer_request_hold test-tenant/ns1 

--policy 的值选择: 
		producer_request_hold:broker 暂停运行,并不再持久化生产请求负载 
		producer_exception:broker 抛出异常,并与客户端断开连接
		consumer_backlog_eviction:broker 丢弃积压消息

(2)获取backlog quota策略

./pulsar-admin namespaces get-backlog-quotas test-tenant/ns1

(3)移除backlog quota策略

./pulsar-admin namespaces remove-backlog-quota test-tenant/ns1

4、配置持久化策略

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

(1)设置持久化策略

pulsar-admin namespaces set-persistence --bookkeeper-ack-quorum 2 --bookkeeper-ensemble 3 --bookkeeper-write-quorum 2 -- ml-mark-delete-max-rate 0 test-tenant/ns1 
参数说明: 
Bookkeeper-ack-quorum:每个 entry 在等待的 acks(有保证的副本)数量,默认值:0 
Bookkeeper-ensemble:单个 topic 使用的 bookie 数量,默认值:0 
Bookkeeper-write-quorum:每个 entry 要写入的次数,默认值:0 
Ml-mark-delete-max-rate:标记-删除操作的限制速率(0表示无限制),默认值:0.0

(2)获取持久化策略

./pulsar-admin namespaces get-persistence test-tenant/ns1

5、配置消息存活时间(TTL)

以秒为单位

(1)设置消息存活时间

./pulsar-admin namespaces set-message-ttl --messageTTL 100 test-tenant/ns1

(2)获取消息的存活时间

./pulsar-admin namespaces get-message-ttl test-tenant/ns1

(3)删除消息的存活时间

./pulsar-admin namespaces remove-message-ttl test-tenant/ns1

6、配置整个名称空间中Topic的消息发送速率

(1)设置Topic的消息发送的速率

./pulsar-admin namespaces set-dispatch-rate test-tenant/ns1 \
--msg-dispatch-rate 1000 \
--byte-dispatch-rate 1048576 \
--dispatch-rate-period 1
参数说明: 
--msg-dispatch-rate : 每dispatch-rate-period秒钟发送的消息数量
--byte-dispatch-rate : 每dispatch-rate-period秒钟发送的总字节数
--dispatch-rate-period : 设置发送的速率, 比如 1 表示 每秒钟

(2)获取topic的消息发送速率

./pulsar-admin namespaces get-dispatch-rate test-tenant/ns1

7、配置整个名称空间中Topic的接收速率

(1)设置Topic的消息接收的速率

pulsar-admin namespaces set-subscription-dispatch-rate test-tenant/ns1 \
--msg-dispatch-rate 1000 \
--byte-dispatch-rate 1048576 \
--dispatch-rate-period
参数说明: 
--msg-dispatch-rate : 每dispatch-rate-period秒钟接收的消息数量
--byte-dispatch-rate : 每dispatch-rate-period秒钟接收的总字节数
--dispatch-rate-period : 设置接收的速率, 比如 1 表示 每秒钟

(2)获取topic的消息接收速率

./pulsar-admin namespaces get-subscription-dispatch-rate test-tenant/ns1

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

(1)设置Topic的消息复制集群的速率

pulsar-admin namespaces set-replicator-dispatch-rate test-tenant/ns1 \
--msg-dispatch-rate 1000 \
--byte-dispatch-rate 1048576 \
--dispatch-rate-period 1
参数说明: 
--msg-dispatch-rate : 每dispatch-rate-period秒钟复制集群的消息数量
--byte-dispatch-rate : 每dispatch-rate-period秒钟复制集群的总字节数
--dispatch-rate-period : 设置复制集群的速率, 比如 1 表示 每秒钟

(2)获取topic的消息复制集群的速率

./pulsar-admin namespaces get-replicator-dispatch-rate test-tenant/ns1

pulsar的topic相关操作

什么是Topic

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

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

persistent://tenant/namespace/topic

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

non-persistent://tenant/namespace/topic

Topic 基础操作

(1)创建Topic

方式一: 创建一个没有分区的topic
bin/pulsar-admin topics create persistent://my-tenant/my-namespace/my-topic
方式二: 创建一个有分区的topic
bin/pulsar-admin topics create-partitioned-topic persistent://my-tenant/my-namespace/my-topic --partitions 4
注意: 不管是有分区还是没有分区, 创建topic后,如果没有任何操作, 60s后pulsar会认为此topic是不活动的, 会自动进行删除, 以避免生成垃圾数据

相关配置:
Brokerdeleteinactivetopicsenabenabled : 默认值为true 表示是否启动自动删除
BrokerDeleteInactiveTopicsFrequencySeconds: 默认为60s 表示检测未活动的时间

(2)列出当前某个名称空间下的所有Topic

./pulsar-admin topics list my-tenant/my-namespace

(3)更新Topic操作

我们可针对有分区的topic去更新其分区的数量
./pulsar-admin topics update-partitioned-topic persistent://my-tenant/my-namespace/my-topic --partitions 8

(4)删除Topic操作

删除没有分区的topic:
bin/pulsar-admin topics delete persistent://my-tenant/my-namespace/my-topic
删除有分区的topic
bin/pulsar-admin topics delete-partitioned-topic persistent://my-tenant/my-namespace/my-topic

Topic 高级操作

(1)授权

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

(2)获取权限

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

(3)取消权限

./pulsar-admin topics revoke-permission --role application1 persistent://test-tenant/ns1/my-topic

转载请注明:西门飞冰的博客 » Pulsar 主要功能介绍及使用

喜欢 (1)or分享 (0)