Pulsar学习笔记之 Authorization授权与Quota配额机制
Posted tabalt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pulsar学习笔记之 Authorization授权与Quota配额机制相关的知识,希望对你有一定的参考价值。
Pulsar Authorization 授权
Pulsar的授权需要开启认证,且需要单独在Broker和Proxy的配置中开启,否则所有认证通过后的用户角色将对所有资源有权限,如未开启认证则所有客户端对所有资源有权限;授权也支持插件化扩展机制,但使用自带的实现就可以满足需求了。此外还可以配置超级用户角色和代理角色,对于集群的管理和Proxy访问等非常有用。
开启Pulsar认证配置
之前我们在 Pulsar学习笔记之 Authentication认证机制与插件开发 文章中介绍了Pulsar的认证机制和认证插件的开发,有需要可以移步过去看认证插件的配置,也可以使用官方推荐的认证插件。
开启Pulsar授权配置示例
# broker.conf
authorizationEnabled=true
authorizationProvider=org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider
superUserRoles=user-role-123456
proxyRoles=pulsar_proxy_role_1
开启授权后,认证通过的用户角色默认是没有任何权限的,需要事先创建租户/命名空间,并给用户角色做授权。
创建租户和命名空间
bin/pulsar-admin tenants create my-tenant
bin/pulsar-admin namespaces create my-tenant/my-namespace
bin/pulsar-admin namespaces grant-permission my-tenant/my-namespace \\
--actions lookup,produce,consume \\
--role userrole-123457
客户端写入有权限命名空间下的Topic
AuthenticationTabaltAK at = new AuthenticationTabaltAK("test_access_key2", "test_access_secret");
//...
Producer<byte[]> producer = client.newProducer()
.topic("my-tenant/my-namespace/my-topic")
.create();
Pulsar resource-quotas 资源配额
Pulsar resource-quotas 资源配额 用于限制命名空间级别的出入消息速率、带宽等
bin/pulsar-admin resource-quotas set \\
--memory 20 \\
--msgRateIn 2 \\
--msgRateOut 20 \\
--bandwidthIn 2 \\
--bandwidthOut 20 \\
--bundle "0x00000000_0x40000000" \\
--namespace "my-tenant/my-namespace"
bin/pulsar-admin namespaces policies my-tenant/my-namespace
bin/pulsar-admin resource-quotas reset-namespace-bundle-quota \\
--bundle "0x00000000_0x40000000" \\
--namespace "my-tenant/my-namespace"
Pulsar backlog-quotas 配置
bin/pulsar-admin namespaces set-backlog-quota "my-tenant/my-namespace" \\
--limit 100 \\
--policy producer_exception / producer_request_hold / consumer_backlog_eviction
bin/pulsar-admin namespaces policies my-tenant/my-namespace
限制backlog的大小可以生效,同时有一些“小特点”,但影响不大
- 定期检测(默认看是约60s),所以首次连接后大量写入可能会超过
- 大小限制并不那么严格,如设置 --limit 100 --policy consumer_backlog_eviction,停止写入后能消费出不止100Bytes数据
- 超过后客户端再次连接会报错: Cannot create producer on topic with backlog quota exceeded。
3种policy的表现
- producer_exception,客户端会直接抛出异常
- producer_request_hold,客户端会阻塞,但当达到超时时间也会抛出超时异常
- consumer_backlog_eviction,客户端继续写入,未及时消费的数据会被删除
以上是关于Pulsar学习笔记之 Authorization授权与Quota配额机制的主要内容,如果未能解决你的问题,请参考以下文章