Managing Namespaces
Pulsar namespaces are logical groupings of topics.
Namespaces can be managed via:
- The
namespaces
command of thepulsar-admin
tool - The
/admin/v2/namespaces
endpoint of the admin REST API - The
namespaces
method of the PulsarAdmin object in the Java API
Namespaces resourcesβ
Createβ
You can create new namespaces under a given tenant.
pulsar-adminβ
Use the create
subcommand and specify the namespace by name:
$ pulsar-admin namespaces create test-tenant/test-namespace
REST APIβ
PUT /admin/v2/namespaces/:tenant/:namespace/createNamespace
Javaβ
admin.namespaces().createNamespace(namespace);
Get policiesβ
You can fetch the current policies associated with a namespace at any time.
pulsar-adminβ
Use the policies
subcommand and specify the namespace:
$ pulsar-admin namespaces policies test-tenant/test-namespace
{
"auth_policies": {
"namespace_auth": {},
"destination_auth": {}
},
"replication_clusters": [],
"bundles_activated": true,
"bundles": {
"boundaries": [
"0x00000000",
"0xffffffff"
],
"numBundles": 1
},
"backlog_quota_map": {},
"persistence": null,
"latency_stats_sample_rate": {},
"message_ttl_in_seconds": 0,
"retention_policies": null,
"deleted": false
}
REST APIβ
GET /admin/v2/namespaces/:tenant/:namespace/getPolicies
Javaβ
admin.namespaces().getPolicies(namespace);
List namespaces within a tenantβ
You can list all namespaces within a given Pulsar tenant.
pulsar-adminβ
Use the list
subcommand and specify the tenant:
$ pulsar-admin namespaces list test-tenant
test-tenant/ns1
test-tenant/ns2
REST APIβ
GET /admin/v2/namespaces/:tenant/getTenantNamespaces
Javaβ
admin.namespaces().getNamespaces(tenant);
Deleteβ
You can delete existing namespaces from a tenant.
pulsar-adminβ
Use the delete
subcommand and specify the namespace:
$ pulsar-admin namespaces delete test-tenant/ns1
RESTβ
DELETE /admin/v2/namespaces/:tenant/:namespace/deleteNamespace
Javaβ
admin.namespaces().deleteNamespace(namespace);
set replication clusterβ
It sets replication clusters for a namespace, so Pulsar can internally replicate publish message from one colo to another colo.
CLIβ
$ pulsar-admin namespaces set-clusters test-tenant/ns1 \
--clusters cl1
RESTβ
[POST /admin/v2/namespaces/:tenant/:namespace/replication](https://pulsar.apache.org/admin-rest-api?version=2.3.0/setNamespaceReplicationClusters&apiversion=v2#operation)
Javaβ
admin.namespaces().setNamespaceReplicationClusters(namespace, clusters);
get replication clusterβ
It gives a list of replication clusters for a given namespace.
CLIβ
$ pulsar-admin namespaces get-clusters test-tenant/cl1/ns1
cl2
RESTβ
[GET /admin/v2/namespaces/:tenant/:namespace/replication](https://pulsar.apache.org/admin-rest-api?version=2.3.0/getNamespaceReplicationClusters&apiversion=v2#operation)
Javaβ
admin.namespaces().getNamespaceReplicationClusters(namespace)
set backlog quota policiesβ
Backlog quota helps broker to restrict bandwidth/storage of a namespace once it reach certain threshold limit . Admin can set this limit and one of the following action after the limit is reached.
-
producer_request_hold: broker will hold and not persist produce request payload
-
producer_exception: broker will disconnects with client by giving exception
-
consumer_backlog_eviction: broker will start discarding backlog messages
Backlog quota restriction can be taken care by defining restriction of backlog-quota-type: destination_storage
CLIβ
$ pulsar-admin namespaces set-backlog-quota --limit 10 --policy producer_request_hold test-tenant/ns1
N/A
RESTβ
[POST /admin/v2/namespaces/:tenant/:namespace/backlogQuota/setBacklogQuota](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/setBacklogQuota)
Javaβ
admin.namespaces().setBacklogQuota(namespace, new BacklogQuota(limit, policy))
get backlog quota policiesβ
It shows a configured backlog quota for a given namespace.
CLIβ
$ pulsar-admin namespaces get-backlog-quotas test-tenant/ns1
{
"destination_storage": {
"limit": 10,
"policy": "producer_request_hold"
}
}
RESTβ
[GET /admin/v2/namespaces/:tenant/:namespace/backlogQuotaMap/getBacklogQuotaMap](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/getBacklogQuotaMap)
Javaβ
admin.namespaces().getBacklogQuotaMap(namespace);
remove backlog quota policiesβ
It removes backlog quota policies for a given namespace
CLIβ
$ pulsar-admin namespaces remove-backlog-quota test-tenant/ns1
N/A
RESTβ
[DELETE /admin/v2/namespaces/:tenant/:namespace/backlogQuota/removeBacklogQuota](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/removeBacklogQuota)
Javaβ
admin.namespaces().removeBacklogQuota(namespace, backlogQuotaType)
set persistence policiesβ
Persistence policies allow to configure persistency-level for all topic messages under a given namespace.
-
Bookkeeper-ack-quorum: Number of acks (guaranteed copies) to wait for each entry, default: 0
-
Bookkeeper-ensemble: Number of bookies to use for a topic, default: 0
-
Bookkeeper-write-quorum: How many writes to make of each entry, default: 0
-
Ml-mark-delete-max-rate: Throttling rate of mark-delete operation (0 means no throttle), default: 0.0
CLIβ
$ 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
N/A
RESTβ
[POST /admin/v2/namespaces/:tenant/:namespace/persistence/setPersistence](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/setPersistence)
Javaβ
admin.namespaces().setPersistence(namespace,new PersistencePolicies(bookkeeperEnsemble, bookkeeperWriteQuorum,bookkeeperAckQuorum,managedLedgerMaxMarkDeleteRate))
get persistence policiesβ
It shows configured persistence policies of a given namespace.
CLIβ
$ pulsar-admin namespaces get-persistence test-tenant/ns1
{
"bookkeeperEnsemble": 3,
"bookkeeperWriteQuorum": 2,
"bookkeeperAckQuorum": 2,
"managedLedgerMaxMarkDeleteRate": 0
}
RESTβ
[GET /admin/v2/namespaces/:tenant/:namespace/persistence/getPersistence](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/getPersistence)
Javaβ
admin.namespaces().getPersistence(namespace)
unload namespace bundleβ
Namespace bundle is a virtual group of topics which belong to same namespace. If broker gets overloaded with number of bundles then this command can help to unload heavy bundle from that broker, so it can be served by some other less loaded broker. Namespace bundle is defined with itβs start and end range such as 0x00000000 and 0xffffffff.
CLIβ
$ pulsar-admin namespaces unload --bundle 0x00000000_0xffffffff test-tenant/ns1
N/A
RESTβ
[PUT /admin/v2/namespaces/:tenant/:namespace/{bundle](https://pulsar.apache.org/admin-rest-api?version=master&apiversion=v2#)/unload|operation/unloadNamespaceBundle?version=2.3.0}
Javaβ
admin.namespaces().unloadNamespaceBundle(namespace, bundle)
set message-ttlβ
It configures messageβs time to live (in seconds) duration.
CLIβ
$ pulsar-admin namespaces set-message-ttl --messageTTL 100 test-tenant/ns1
N/A
RESTβ
[POST /admin/v2/namespaces/:tenant/:namespace/messageTTL/setNamespaceMessageTTL](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/setNamespaceMessageTTL)
Javaβ
admin.namespaces().setNamespaceMessageTTL(namespace, messageTTL)
get message-ttlβ
It gives a message ttl of configured namespace.
CLIβ
$ pulsar-admin namespaces get-message-ttl test-tenant/ns1
100
RESTβ
[GET /admin/v2/namespaces/:tenant/:namespace/messageTTL/getNamespaceMessageTTL](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/getNamespaceMessageTTL)
Javaβ
admin.namespaces().getNamespaceMessageTTL(namespace)
split bundleβ
Each namespace bundle can contain multiple topics and each bundle can be served by only one broker. If bundle gets heavy with multiple live topics in it then it creates load on that broker and in order to resolve this issue, admin can split bundle using this command.
CLIβ
$ pulsar-admin namespaces split-bundle --bundle 0x00000000_0xffffffff test-tenant/ns1
N/A
RESTβ
[PUT /admin/v2/namespaces/:tenant/:namespace/{bundle](https://pulsar.apache.org/admin-rest-api?version=master&apiversion=v2#)/split|operation/splitNamespaceBundle?version=2.3.0}
Javaβ
admin.namespaces().splitNamespaceBundle(namespace, bundle, unloadSplitBundles)
clear backlogβ
It clears all message backlog for all the topics those belong to specific namespace. You can also clear backlog for a specific subscription as well.
CLIβ
$ pulsar-admin namespaces clear-backlog --sub my-subscription test-tenant/ns1
N/A
RESTβ
[POST /admin/v2/namespaces/:tenant/:namespace/clearBacklog](https://pulsar.apache.org/admin-rest-api?version=2.3.0/clearNamespaceBacklogForSubscription&apiversion=v2#operation)
Javaβ
admin.namespaces().clearNamespaceBacklogForSubscription(namespace, subscription)
clear bundle backlogβ
It clears all message backlog for all the topics those belong to specific NamespaceBundle. You can also clear backlog for a specific subscription as well.
CLIβ
$ pulsar-admin namespaces clear-backlog --bundle 0x00000000_0xffffffff --sub my-subscription test-tenant/ns1
N/A
RESTβ
[POST /admin/v2/namespaces/:tenant/:namespace/{bundle](https://pulsar.apache.org/admin-rest-api?version=master&apiversion=v2#)/clearBacklog|operation?version=2.3.0/clearNamespaceBundleBacklogForSubscription}
Javaβ
admin.namespaces().clearNamespaceBundleBacklogForSubscription(namespace, bundle, subscription)
set retentionβ
Each namespace contains multiple topics and each topicβs retention size (storage size) should not exceed to a specific threshold or it should be stored till certain time duration. This command helps to configure retention size and time of topics in a given namespace.
CLIβ
$ pulsar-admin set-retention --size 10 --time 100 test-tenant/ns1
N/A
RESTβ
[POST /admin/v2/namespaces/:tenant/:namespace/retention/setRetention](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/setRetention)
Javaβ
admin.namespaces().setRetention(namespace, new RetentionPolicies(retentionTimeInMin, retentionSizeInMB))
get retentionβ
It shows retention information of a given namespace.
CLIβ
$ pulsar-admin namespaces get-retention test-tenant/ns1
{
"retentionTimeInMinutes": 10,
"retentionSizeInMB": 100
}
RESTβ
[GET /admin/v2/namespaces/:tenant/:namespace/retention/getRetention](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/getRetention)
Javaβ
admin.namespaces().getRetention(namespace)
set dispatch throttlingβ
It sets message dispatch rate for all the topics under a given namespace.
Dispatch rate can be restricted by number of message per X seconds (msg-dispatch-rate
) or by number of message-bytes per X second (byte-dispatch-rate
).
dispatch rate is in second and it can be configured with dispatch-rate-period
. Default value of msg-dispatch-rate
and byte-dispatch-rate
is -1 which
disables the throttling.
CLIβ
$ pulsar-admin namespaces set-dispatch-rate test-tenant/ns1 \
--msg-dispatch-rate 1000 \
--byte-dispatch-rate 1048576 \
--dispatch-rate-period 1
RESTβ
[POST /admin/v2/namespaces/:tenant/:namespace/dispatchRate/setDispatchRate](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/setDispatchRate)
Javaβ
admin.namespaces().setDispatchRate(namespace, 1000, 1048576, 1)
get configured message-rateβ
It shows configured message-rate for the namespace (topics under this namespace can dispatch this many messages per second)
CLIβ
$ pulsar-admin namespaces get-dispatch-rate test-tenant/ns1
{
"dispatchThrottlingRatePerTopicInMsg" : 1000,
"dispatchThrottlingRatePerTopicInByte" : 1048576,
"ratePeriodInSecond" : 1
}
RESTβ
[GET /admin/v2/namespaces/:tenant/:namespace/dispatchRate/getDispatchRate](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/getDispatchRate)
Javaβ
admin.namespaces().getDispatchRate(namespace)
Unloading from a brokerβ
You can unload a namespace, or a namespace bundle, from the Pulsar broker that is currently responsible for it.
pulsar-adminβ
Use the unload
subcommand of the namespaces
command.
CLIβ
$ pulsar-admin namespaces unload my-tenant/my-ns
RESTβ
[PUT /admin/v2/namespaces/:tenant/:namespace/unload/unloadNamespace](https://pulsar.apache.org/admin-rest-api?version=2.3.0&apiversion=v2#operation/unloadNamespace)
Javaβ
admin.namespaces().unload(namespace)