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,客戶端繼續寫入,未及時消費的數據會被刪除
相關文章
相關標籤/搜索