Pulsar学习笔记之 Authorization受权与Quota配额机制

Pulsar Authorization 受权

Pulsar的受权须要开启认证,且须要单独在Broker和Proxy的配置中开启,不然全部认证经过后的用户角色将对全部资源有权限,如未开启认证则全部客户端对全部资源有权限;受权也支持插件化扩展机制,但使用自带的实现就能够知足需求了。此外还能够配置超级用户角色和代理角色,对于集群的管理和Proxy访问等很是有用。apache

开启Pulsar认证配置

以前咱们在 Pulsar学习笔记之 Authentication认证机制与插件开发 文章中介绍了Pulsar的认证机制和认证插件的开发,有须要能够移步过去看认证插件的配置,也可使用官方推荐的认证插件。segmentfault

开启Pulsar受权配置示例

# broker.conf
authorizationEnabled=true
authorizationProvider=org.apache.pulsar.broker.authorization.PulsarAuthorizationProvider
superUserRoles=user-role-123456
proxyRoles=pulsar_proxy_role_1

开启受权后,认证经过的用户角色默认是没有任何权限的,须要事先建立租户/命名空间,并给用户角色作受权。ide

建立租户和命名空间

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的大小能够生效,同时有一些“小特色”,但影响不大spa

  • 按期检测(默认看是约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,客户端继续写入,未及时消费的数据会被删除
相关文章
相关标签/搜索