Pulsar Authorization 受权
Pulsar的受权须要开启认证,且须要独自在Broker和Proxy的配置中开启,否则所有认证通过后的用户角色将对所有资源有权限,如未开启认证则所有客户端对所有资源有权限;受权也反对插件化扩大机制,但应用自带的实现就能够满足需要了。此外还能够配置超级用户角色和代理角色,对于集群的治理和Proxy拜访等十分有用。
开启Pulsar认证配置
之前咱们在 Pulsar学习笔记之 Authentication认证机制与插件开发 文章中介绍了Pulsar的认证机制和认证插件的开发,有须要能够移步过来看认证插件的配置,也能够应用官网举荐的认证插件。
开启Pulsar受权配置示例
# broker.confauthorizationEnabled=trueauthorizationProvider=org.apache.pulsar.broker.authorization.PulsarAuthorizationProvidersuperUserRoles=user-role-123456proxyRoles=pulsar_proxy_role_1
开启受权后,认证通过的用户角色默认是没有任何权限的,须要当时创立租户/命名空间,并给用户角色做受权。
创立租户和命名空间
bin/pulsar-admin tenants create my-tenantbin/pulsar-admin namespaces create my-tenant/my-namespacebin/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_evictionbin/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,客户端持续写入,未及时生产的数据会被删除