blob: ad8897985416767483aac629d0106b5600c9f3d9 [file] [log] [blame] [view]
---
id: admin-api-namespaces
title: Managing Namespaces
sidebar_label: "Namespaces"
description: Learn how to manage namespaces using Pulsar CLI and admin APIs.
---
````mdx-code-block
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
````
:::tip
This page only shows **some frequently used operations**.
- For the latest and complete information about `Pulsar admin`, including commands, flags, descriptions, and more information, see [Pulsar admin docs](pathname:///reference/#/@pulsar:version_reference@/pulsar-admin/).
- For the latest and complete information about `REST API`, including parameters, responses, samples, and more, see {@inject: rest:REST:/} API doc.
- For the latest and complete information about `Java admin API`, including classes, methods, descriptions, and more, see [Java admin API doc](/api/admin/).
:::
Pulsar [namespaces](reference-terminology.md#namespace) are logical groupings of [topics](reference-terminology.md#topic).
Namespaces can be managed via:
* The `namespaces` command of the [`pulsar-admin`](pathname:///reference/#/@pulsar:version_reference@/pulsar-admin/) tool
* The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
* The `namespaces` method of the `PulsarAdmin` object in the [Java API](client-libraries-java.md)
## Namespaces resources
### Create namespaces
You can create new namespaces under a given [tenant](reference-terminology.md#tenant).
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
Use the [`create`](pathname:///reference/#/@pulsar:version_reference@/pulsar-admin/namespaces?id=create) subcommand and specify the namespace by name:
```shell
pulsar-admin namespaces create test-tenant/test-namespace
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_createNamespace)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().createNamespace(namespace);
```
</TabItem>
</Tabs>
````
### Get policies
You can fetch the current policies associated with a namespace at any time.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
Use the [`policies`](pathname:///reference/#/@pulsar:version_reference@/pulsar-admin/namespaces?id=policies) subcommand and specify the namespace:
```shell
pulsar-admin namespaces policies test-tenant/test-namespace
```
Example output:
```json
{
"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
}
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getPolicies)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getPolicies(namespace);
```
</TabItem>
</Tabs>
````
### List namespaces
You can list all namespaces within a given Pulsar [tenant](reference-terminology.md#tenant).
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
Use the [`list`](pathname:///reference/#/@pulsar:version_reference@/pulsar-admin/namespaces?id=list) subcommand and specify the tenant:
```shell
pulsar-admin namespaces list test-tenant
```
Example output:
```
test-tenant/namespace1
test-tenant/namespace2
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getTenantNamespaces)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getNamespaces(tenant);
```
</TabItem>
</Tabs>
````
### Delete namespaces
You can delete existing namespaces from a tenant.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
Use the [`delete`](pathname:///reference/#/@pulsar:version_reference@/pulsar-admin/namespaces?id=delete) subcommand and specify the namespace:
```shell
pulsar-admin namespaces delete test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_deleteNamespace)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().deleteNamespace(namespace);
```
</TabItem>
</Tabs>
````
### Configure replication clusters
#### Set replication cluster
You can set replication clusters for a namespace to enable Pulsar to internally replicate the published messages from one colocation facility to another.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces set-clusters test-tenant/namespace1 --clusters cl1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setNamespaceReplicationClusters)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().setNamespaceReplicationClusters(namespace, clusters);
```
</TabItem>
</Tabs>
````
#### Get replication cluster
You can get the list of replication clusters for a given namespace.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces get-clusters test-tenant/cluster1/namespace1
```
Example output:
```
cluster2
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getNamespaceReplicationClusters)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getNamespaceReplicationClusters(namespace)
```
</TabItem>
</Tabs>
````
### Configure backlog quota policies
#### Set backlog quota policies
Backlog quota helps the broker to restrict bandwidth/storage of a namespace once it reaches a certain threshold limit. Admin can set the limit and take the corresponding action after the limit is reached.
1. producer_request_hold: the producer holds the message and retries until client configuration `sendTimeoutMs` is exceeded
2. producer_exception: the producer throws an exception when trying to send a message
3. consumer_backlog_eviction: broker starts discarding backlog messages
Backlog quota restriction can be taken care of by defining the restriction of backlog-quota-type: destination_storage.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces set-backlog-quota --limit 10G \
--limitTime 36000 \
--policy producer_request_hold \
test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setBacklogQuota)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().setBacklogQuota(namespace, new BacklogQuota(limit, limitTime, policy))
```
</TabItem>
</Tabs>
````
#### Get backlog quota policies
You can get a configured backlog quota for a given namespace.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces get-backlog-quotas test-tenant/namespace1
```
Example output:
```
destination_storage BacklogQuotaImpl(limit=10737418240, limitSize=10737418240, limitTime=36000, policy=producer_request_hold)
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getBacklogQuotaMap)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getBacklogQuotaMap(namespace);
```
</TabItem>
</Tabs>
````
#### Remove backlog quota policies
You can remove backlog quota policies for a given namespace.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces remove-backlog-quota test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_removeBacklogQuota)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().removeBacklogQuota(namespace, backlogQuotaType)
```
</TabItem>
</Tabs>
````
### Configure persistence policies
#### Set persistence policies
Persistence policies allow users 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: 2
- Bookkeeper-ensemble: Number of bookies to use for a topic, default: 2
- Bookkeeper-write-quorum: How many writes to make of each entry, default: 2
- Ml-mark-delete-max-rate: Throttling rate of mark-delete operation (0 means no throttle), default: 0
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces set-persistence \
--bookkeeper-ack-quorum 2 --bookkeeper-ensemble 3 \
--bookkeeper-write-quorum 2 --ml-mark-delete-max-rate 0 \
test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setPersistence)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().setPersistence(namespace,new PersistencePolicies(bookkeeperEnsemble, bookkeeperWriteQuorum,bookkeeperAckQuorum,managedLedgerMaxMarkDeleteRate))
```
</TabItem>
</Tabs>
````
#### Get persistence policies
You can get the configured persistence policies of a given namespace.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces get-persistence test-tenant/namespace1
```
Example output:
```json
{
"bookkeeperEnsemble": 3,
"bookkeeperWriteQuorum": 2,
"bookkeeperAckQuorum": 2,
"managedLedgerMaxMarkDeleteRate": 0
}
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getPersistence)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getPersistence(namespace)
```
</TabItem>
</Tabs>
````
### Configure namespace bundles
#### Unload namespace bundles
A namespace bundle is a virtual group of topics that belong to the same namespace. If the broker gets overloaded with the number of bundles, this command can help unload a bundle from that broker, so it can be served by some other less-loaded brokers. The namespace bundle ID ranges from 0x00000000 to 0xffffffff.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces unload --bundle 0x00000000_0xffffffff test-tenant/namespace1
pulsar-admin namespaces unload --bundle 0x00000000_0xffffffff test-tenant/namespace1
pulsar-admin namespaces unload --bundle 0x00000000_0xffffffff --destinationBroker broker1.use.org.com:8080 test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_unloadNamespaceBundle)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().unloadNamespaceBundle(namespace, bundle)
```
</TabItem>
</Tabs>
````
#### Split namespace bundles
One namespace bundle can contain multiple topics but can be served by only one broker. If a single bundle is creating an excessive load on a broker, an admin can split the bundle using the command below, permitting one or more of the new bundles to be unloaded, thus balancing the load across the brokers.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces split-bundle --bundle 0x00000000_0xffffffff test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_splitNamespaceBundle)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().splitNamespaceBundle(namespace, bundle, unloadSplitBundles, splitAlgorithmName)
```
</TabItem>
</Tabs>
````
### Configure message TTL
#### Set message-ttl
You can configure the time to live (in seconds) duration for messages. In the example below, the message-ttl is set as 100s.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces set-message-ttl --messageTTL 100 test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setNamespaceMessageTTL)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().setNamespaceMessageTTL(namespace, messageTTL)
```
</TabItem>
</Tabs>
````
#### Get message-ttl
When the message-ttl for a namespace is set, you can use the command below to get the configured value. This example comtinues the example of the command `set message-ttl`, so the returned value is 100(s).
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces get-message-ttl test-tenant/namespace1
```
Example output:
```
100
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getNamespaceMessageTTL)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getNamespaceMessageTTL(namespace)
```
```
100
```
</TabItem>
</Tabs>
````
#### Remove message-ttl
Remove a message TTL of the configured namespace.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces remove-message-ttl test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_removeNamespaceMessageTTL)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().removeNamespaceMessageTTL(namespace)
```
</TabItem>
</Tabs>
````
### Clear backlog
#### Clear namespace backlog
It clears all message backlogs for all the topics that belong to a specific namespace. You can also clear backlogs for a specific subscription as well.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces clear-backlog --sub my-subscription test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_clearNamespaceBacklogForSubscription)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().clearNamespaceBacklogForSubscription(namespace, subscription)
```
</TabItem>
</Tabs>
````
#### Clear bundle backlog
It clears all message backlogs for all the topics that belong to a specific NamespaceBundle. You can also clear backlogs for a specific subscription as well.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces clear-backlog \
--bundle 0x00000000_0xffffffff \
--sub my-subscription \
test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_clearNamespaceBundleBacklogForSubscription)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().clearNamespaceBundleBacklogForSubscription(namespace, bundle, subscription)
```
</TabItem>
</Tabs>
````
### Configure retention
#### Set retention
Each namespace contains multiple topics and the retention size (storage size) of each topic should not exceed a specific threshold or it should be stored for a certain period. This command helps configure the retention size and time of topics in a given namespace.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces set-retention --size 100M --time 10m test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setRetention)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().setRetention(namespace, new RetentionPolicies(retentionTimeInMin, retentionSizeInMB))
```
</TabItem>
</Tabs>
````
#### Get retention
It shows the retention information of a given namespace.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces get-retention test-tenant/namespace1
```
```json
{
"retentionTimeInMinutes": 10,
"retentionSizeInMB": 100
}
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getRetention)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getRetention(namespace)
```
</TabItem>
</Tabs>
````
### Configure dispatch throttling for topics
#### Set dispatch throttling for topics
It sets the message dispatch rate for all the topics under a given namespace. The dispatch rate can be restricted by the number of messages per X seconds (`msg-dispatch-rate`) or by the number of message-bytes per X second (`byte-dispatch-rate`). The dispatch rate is in second and it can be configured with `dispatch-rate-period`. The default value of `msg-dispatch-rate` and `byte-dispatch-rate` is -1 which
disables the throttling.
:::note
- If neither `clusterDispatchRate` nor `topicDispatchRate` is configured, dispatch throttling is disabled.
- If `topicDispatchRate` is not configured, `clusterDispatchRate` takes effect.
- If `topicDispatchRate` is configured, `topicDispatchRate` takes effect.
:::
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces set-dispatch-rate test-tenant/namespace1 \
--msg-dispatch-rate 1000 \
--byte-dispatch-rate 1048576 \
--dispatch-rate-period 1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setDispatchRate)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().setDispatchRate(namespace, new DispatchRate(1000, 1048576, 1))
```
</TabItem>
</Tabs>
````
#### Get configured message-rate for topics
It shows the configured message-rate for the namespace (topics under this namespace can dispatch this many messages per second)
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces get-dispatch-rate test-tenant/namespace1
```
Example output:
```json
{
"dispatchThrottlingRateInMsg" : 1000,
"dispatchThrottlingRateInByte" : 1048576,
"relativeToPublishRate" : false,
"ratePeriodInSecond" : 1
}
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getDispatchRate)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getDispatchRate(namespace)
```
</TabItem>
</Tabs>
````
### Configure dispatch throttling for subscription
#### Set dispatch throttling for subscription
It sets the message dispatch rate for all the subscriptions of topics under a given namespace. The dispatch rate can be restricted by the number of messages per X seconds (`msg-dispatch-rate`) or by the number of message-bytes per X second (`byte-dispatch-rate`). The dispatch rate is in second and it can be configured with `dispatch-rate-period`. The default value of `msg-dispatch-rate` and `byte-dispatch-rate` is -1 which
disables the throttling.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces set-subscription-dispatch-rate test-tenant/namespace1 \
--msg-dispatch-rate 1000 \
--byte-dispatch-rate 1048576 \
--dispatch-rate-period 1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setSubscriptionDispatchRate)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().setSubscriptionDispatchRate(namespace, new DispatchRate(1000, 1048576, 1))
```
</TabItem>
</Tabs>
````
#### Get configured message-rate for subscription
It shows the configured message-rate for the namespace (topics under this namespace can dispatch this many messages per second).
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces get-subscription-dispatch-rate test-tenant/namespace1
```
Example output:
```json
{
"dispatchThrottlingRateInMsg" : 1000,
"dispatchThrottlingRateInByte" : 1048576,
"relativeToPublishRate" : false,
"ratePeriodInSecond" : 1
}
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getSubscriptionDispatchRate)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getSubscriptionDispatchRate(namespace)
```
</TabItem>
</Tabs>
````
### Configure dispatch throttling for replicators
#### Set dispatch throttling for replicators
It sets the message dispatch rate for all the replicators between replication clusters under a given namespace. The dispatch rate can be restricted by the number of messages per X seconds (`msg-dispatch-rate`) or by the number of message-bytes per X second (`byte-dispatch-rate`). The dispatch rate is in second and it can be configured with `dispatch-rate-period`. The default value of `msg-dispatch-rate` and `byte-dispatch-rate` is -1 which disables the throttling.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces set-replicator-dispatch-rate test-tenant/namespace1 \
--msg-dispatch-rate 1000 \
--byte-dispatch-rate 1048576 \
--dispatch-rate-period 1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setDispatchRate)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().setReplicatorDispatchRate(namespace, new DispatchRate(1000, 1048576, 1))
```
</TabItem>
</Tabs>
````
#### Get configured message-rate for replicators
It shows the configured message-rate for the namespace (topics under this namespace can dispatch this many messages per second)
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces get-replicator-dispatch-rate test-tenant/namespace1
```
```json
{
"dispatchThrottlingRatePerTopicInMsg" : 1000,
"dispatchThrottlingRatePerTopicInByte" : 1048576,
"ratePeriodInSecond" : 1
}
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getDispatchRate)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getReplicatorDispatchRate(namespace)
```
</TabItem>
</Tabs>
````
### Configure deduplication snapshot interval
#### Get deduplication snapshot interval
It shows the configured `deduplicationSnapshotInterval` for a namespace (Each topic under the namespace will take a deduplication snapshot according to this interval)
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces get-deduplication-snapshot-interval test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getDeduplicationSnapshotInterval)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getDeduplicationSnapshotInterval(namespace)
```
</TabItem>
</Tabs>
````
#### Set deduplication snapshot interval
Set the configured `deduplicationSnapshotInterval` for a namespace. Each topic under the namespace will take a deduplication snapshot according to this interval. `brokerDeduplicationEnabled` must be set to `true` for this property to take effect.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces set-deduplication-snapshot-interval test-tenant/namespace1 --interval 1000
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setDeduplicationSnapshotInterval)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().setDeduplicationSnapshotInterval(namespace, 1000)
```
</TabItem>
</Tabs>
````
#### Remove deduplication snapshot interval
Remove configured `deduplicationSnapshotInterval` of a namespace (Each topic under the namespace will take a deduplication snapshot according to this interval).
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces remove-deduplication-snapshot-interval test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setDeduplicationSnapshotInterval)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().removeDeduplicationSnapshotInterval(namespace)
```
</TabItem>
</Tabs>
````
### Namespace isolation
You can use the [Pulsar isolation policy](administration-isolation.md) to allocate resources (broker and bookie) for a namespace.
### Unload namespaces from a broker
You can unload a namespace, or a [namespace bundle](reference-terminology.md#namespace-bundle), from the Pulsar [broker](reference-terminology.md#broker) that is currently responsible for it.
#### pulsar-admin
Use the [`unload`](pathname:///reference/#/@pulsar:version_reference@/pulsar-admin/namespaces?id=unload) subcommand of the [`namespaces`](pathname:///reference/#/@pulsar:version_reference@/pulsar-admin/namespaces) command.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces unload my-tenant/my-ns
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_unloadNamespace)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().unload(namespace)
```
</TabItem>
</Tabs>
````
### Configure entry filters policy
#### Set entry filters policy
Entry filter helps with filtering message on server side.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```
pulsar-admin namespaces set-entry-filters \
--desc "The description of the entry filter to be used for user help." \
--entry-filters-name "The class name for the entry filter." \
--entry-filters-dir "The directory for all the entry filter implementations." \
test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_setEntryFiltersPerTopic)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().setEntryFilters(namespace, new EntryFilters("desc", "classes name", "class files localtion"))
```
</TabItem>
</Tabs>
````
#### Get entry filters policies
You can get a configured entry filter for a given namespace.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces get-entry-filters test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_getEntryFiltersPerTopic)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().getEntryFilters(namespace);
```
</TabItem>
</Tabs>
````
#### Remove entry filters policies
You can remove entry filters policies for a given namespace.
````mdx-code-block
<Tabs groupId="api-choice"
defaultValue="pulsar-admin"
values={[{"label":"pulsar-admin","value":"pulsar-admin"},{"label":"REST API","value":"REST API"},{"label":"Java","value":"Java"}]}>
<TabItem value="pulsar-admin">
```shell
pulsar-admin namespaces remove-entry-filters test-tenant/namespace1
```
</TabItem>
<TabItem value="REST API">
[](swagger:/admin/v2/Namespaces_removeNamespaceEntryFilters)
</TabItem>
<TabItem value="Java">
```java
admin.namespaces().removeEntryFilters(namespace)
```
</TabItem>
</Tabs>
````