blob: 3114c62923594dc16177128b54ead118a8e2406d [file] [log] [blame] [view]
---
id: admin-api-get-started
title: Get started
sidebar_label: "Get started"
description: Learn how to manage topics in Pulsar using the Pulsar admin CLI or Pulsar admin APIs.
---
````mdx-code-block
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
````
This guide walks you through the quickest way to get started with the following methods to manage topics.
````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 CLI](pathname:///reference/#/@pulsar:version_reference@/pulsar-admin/) is a command-line tool and is available in the bin folder of your Pulsar installation.
</TabItem>
<TabItem value="REST API">
[REST API](pathname:///admin-rest-api/?version=@pulsar:version_number@) belongs to HTTP calls, which are made against the admin APIs provided by brokers. In addition, both the Java admin API and pulsar-admin CLI use the REST API.
</TabItem>
<TabItem value="Java">
[Java admin API](/api/admin/) is a programmable interface written in Java.
</TabItem>
</Tabs>
````
Check the detailed steps below.
````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">
To manage topics using pulsar-admin CLI, complte the following steps.
1. Set the service URL.
2. Create a partitioned topic.
3. Update the number of a partition.
4. Produce messages to the topic.
5. Check the stats of the topic.
6. Delete the topic.
**Prerequisites**
- Install and start Pulsar standalone. This tutorial runs Pulsar 2.11 as an example.
**Steps**
**Step 1:** Set the service URLs to point to the broker service in [client.conf](https://github.com/apache/pulsar/blob/master/conf/client.conf).
```bash
webServiceUrl=http://localhost:8080/
brokerServiceUrl=pulsar://localhost:6650/
```
**Step 2:** Create a persistent topic named _test-topic-1_ with 6 partitions.
**Input**
```bash
bin/pulsar-admin topics create-partitioned-topic \
persistent://public/default/test-topic-1 \
--partitions 6
```
**Output**
There is no output. You can check the status of the topic in Step 5.
**Step 3:** Update the number of the partition to 8.
**Input**
```bash
bin/pulsar-admin topics update-partitioned-topic \
persistent://public/default/test-topic-1 \
--partitions 8
```
**Output**
There is no output. You can check the number of partitions in Step 5.
**Step 4:** Produce some messages to the partitioned topic _test-topic-1_.
**Input**
```bash
bin/pulsar-perf produce -u pulsar://localhost:6650 -r 1000 -i 1000 persistent://public/default/test-topic-1
```
**Output**
```bash
2023-03-07T15:33:56,832+0800 [main] INFO org.apache.pulsar.testclient.PerformanceProducer - Starting Pulsar perf producer with config: {
"confFile" : "/Users/yu/apache-pulsar-2.11.0/conf/client.conf",
"serviceURL" : "pulsar://localhost:6650",
"authPluginClassName" : "",
"authParams" : "",
"tlsTrustCertsFilePath" : "",
"tlsAllowInsecureConnection" : false,
"tlsHostnameVerificationEnable" : false,
"maxConnections" : 1,
"statsIntervalSeconds" : 1000,
"ioThreads" : 1,
"enableBusyWait" : false,
"listenerName" : null,
"listenerThreads" : 1,
"maxLookupRequest" : 50000,
"topics" : [ "persistent://public/default/test-topic-1" ],
"numTestThreads" : 1,
"msgRate" : 1000,
"msgSize" : 1024,
"numTopics" : 1,
"numProducers" : 1,
"separator" : "-",
"sendTimeout" : 0,
"producerName" : null,
"adminURL" : "http://localhost:8080/",
...
2023-03-07T15:35:03,769+0800 [Thread-0] INFO org.apache.pulsar.testclient.PerformanceProducer - Aggregated latency stats --- Latency: mean: 8.931 ms - med: 3.775 - 95pct: 32.144 - 99pct: 98.432 - 99.9pct: 216.088 - 99.99pct: 304.807 - 99.999pct: 349.391 - Max: 351.235
```
**Step 5:** Check the internal stats of the partitioned topic _test-topic-1_.
**Input**
```bash
bin/pulsar-admin topics partitioned-stats-internal \
persistent://public/default/test-topic-1
```
**Output**
Below is a part of the output. For detailed explanations of topic stats, see Pulsar statistics.
```bash
{
"metadata" : {
"partitions" : 8
},
"partitions" : {
"persistent://public/default/test-topic-1-partition-1" : {
"entriesAddedCounter" : 4213,
"numberOfEntries" : 4213,
"totalSize" : 8817693,
"currentLedgerEntries" : 4212,
"currentLedgerSize" : 8806289,
"lastLedgerCreatedTimestamp" : "2023-03-07T15:33:59.367+08:00",
"waitingCursorsCount" : 0,
"pendingAddEntriesCount" : 0,
"lastConfirmedEntry" : "65:4211",
"state" : "LedgerOpened",
"ledgers" : [ {
"ledgerId" : 49,
"entries" : 1,
"size" : 11404,
"offloaded" : false,
"underReplicated" : false
}, {
"ledgerId" : 65,
"entries" : 0,
"size" : 0,
"offloaded" : false,
"underReplicated" : false
} ],
"cursors" : {
"test-subscriptio-1" : {
"markDeletePosition" : "49:-1",
"readPosition" : "49:0",
"waitingReadOp" : false,
"pendingReadOps" : 0,
"messagesConsumedCounter" : 0,
"cursorLedger" : -1,
"cursorLedgerLastEntry" : -1,
"individuallyDeletedMessages" : "[]",
"lastLedgerSwitchTimestamp" : "2023-03-06T16:41:32.801+08:00",
"state" : "NoLedger",
"numberOfEntriesSinceFirstNotAckedMessage" : 1,
"totalNonContiguousDeletedMessagesRange" : 0,
"subscriptionHavePendingRead" : false,
"subscriptionHavePendingReplayRead" : false,
"properties" : { }
},
"test-subscription-1" : {
"markDeletePosition" : "49:-1",
"readPosition" : "49:0",
"waitingReadOp" : false,
"pendingReadOps" : 0,
"messagesConsumedCounter" : 0,
"cursorLedger" : -1,
"cursorLedgerLastEntry" : -1,
"individuallyDeletedMessages" : "[]",
"lastLedgerSwitchTimestamp" : "2023-03-06T16:41:32.801+08:00",
"state" : "NoLedger",
"numberOfEntriesSinceFirstNotAckedMessage" : 1,
"totalNonContiguousDeletedMessagesRange" : 0,
"subscriptionHavePendingRead" : false,
"subscriptionHavePendingReplayRead" : false,
"properties" : { }
}
},
"schemaLedgers" : [ ],
"compactedLedger" : {
"ledgerId" : -1,
"entries" : -1,
"size" : -1,
"offloaded" : false,
"underReplicated" : false
}
},
...
```
**Step 6:** Delete the topic _test-topic-1_.
**Input**
```bash
bin/pulsar-admin topics delete-partitioned-topic persistent://public/default/test-topic-1
```
**Output**
There is no output. You can verify whether the _test-topic-1_ exists or not using the following command.
**Input**
List topics in `public/default` namespace.
```bash
bin/pulsar-admin topics list public/default
```
</TabItem>
<TabItem value="REST API">
To manage topics using REST API, complete the following steps.
1. Create a partitioned topic
2. Update the number of a partition.
3. Produce messages to the topic.
4. Check the stats of the topic.
5. Delete the topic.
**Prerequisites**
- Install and start Pulsar standalone. This tutorial runs Pulsar 2.11 as an example.
**Steps**
**Step 1:** Create a persistent topic named _test-topic-2_ with 4 partitions.
**Input**
```bash
curl -X PUT http://localhost:8080/admin/v2/persistent/public/default/test-topic-2/partitions -H 'Content-Type: application/json' -d "4"
```
**Output**
There is no output. You can check the topic in Step 4.
**Step 2:** Update the number of the partition to 5.
**Input**
```bash
curl -X POST http://localhost:8080/admin/v2/persistent/public/default/test-topic-2/partitions -H 'Content-Type: application/json' -d "5"
```
**Output**
There is no output. You can check the status of the topic in Step 4.
**Step 3:** Produce some messages to the partitioned topic _test-topic-2_.
**Input**
```bash
bin/pulsar-perf produce -u pulsar://localhost:6650 -r 1000 -i 1000 persistent://public/default/test-topic-2
```
**Output**
```bash
2023-03-08T15:47:06,268+0800 [main] INFO org.apache.pulsar.testclient.PerformanceProducer - Starting Pulsar perf producer with config: {
"confFile" : "/Users/yu/apache-pulsar-2.11.0/conf/client.conf",
"serviceURL" : "pulsar://localhost:6650",
"authPluginClassName" : "",
"authParams" : "",
"tlsTrustCertsFilePath" : "",
"tlsAllowInsecureConnection" : false,
"tlsHostnameVerificationEnable" : false,
"maxConnections" : 1,
"statsIntervalSeconds" : 1000,
"ioThreads" : 1,
"enableBusyWait" : false,
"listenerName" : null,
"listenerThreads" : 1,
"maxLookupRequest" : 50000,
"topics" : [ "persistent://public/default/test-topic-2" ],
"numTestThreads" : 1,
"msgRate" : 1000,
"msgSize" : 1024,
"numTopics" : 1,
"numProducers" : 1,
"separator" : "-",
"sendTimeout" : 0,
"producerName" : null,
"adminURL" : "http://localhost:8080/",
"deprecatedAuthPluginClassName" : null,
"maxOutstanding" : 0,
"maxPendingMessagesAcrossPartitions" : 0,
"partitions" : null,
"numMessages" : 0,
"compression" : "NONE",
"payloadFilename" : null,
"payloadDelimiter" : "\\n",
"batchTimeMillis" : 1.0,
"batchMaxMessages" : 1000,
"batchMaxBytes" : 4194304,
"testTime" : 0,
"warmupTimeSeconds" : 1.0,
"encKeyName" : null,
"encKeyFile" : null,
"delay" : 0,
"exitOnFailure" : false,
"messageKeyGenerationMode" : null,
"producerAccessMode" : "Shared",
"formatPayload" : false,
"formatterClass" : "org.apache.pulsar.testclient.DefaultMessageFormatter",
"transactionTimeout" : 10,
"numMessagesPerTransaction" : 50,
"isEnableTransaction" : false,
"isAbortTransaction" : false,
"histogramFile" : null
}
...
2023-03-08T15:53:28,178+0800 [Thread-0] INFO org.apache.pulsar.testclient.PerformanceProducer - Aggregated latency stats --- Latency: mean: 4.481 ms - med: 2.918 - 95pct: 10.710 - 99pct: 38.928 - 99.9pct: 112.689 - 99.99pct: 154.241 - 99.999pct: 193.249 - Max: 241.717
```
**Step 4:** Check the internal stats of the topic _test-topic-2_.
**Input**
```bash
curl -X GET http://localhost:8080/admin/v2/persistent/public/default/test-topic-2/partitioned-internalStats
```
**Output**
For detailed explanations of topic stats, see Pulsar statistics.
```bash
{"metadata":{"partitions":5},"partitions":{"persistent://public/default/test-topic-2-partition-3":{"entriesAddedCounter":47087,"numberOfEntries":47087,"totalSize":80406959,"currentLedgerEntries":47087,"currentLedgerSize":80406959,"lastLedgerCreatedTimestamp":"2023-03-08T15:47:07.273+08:00","waitingCursorsCount":0,"pendingAddEntriesCount":0,"lastConfirmedEntry":"117:47086","state":"LedgerOpened","ledgers":[{"ledgerId":117,"entries":0,"size":0,"offloaded":false,"underReplicated":false}],"cursors":{},"schemaLedgers":[],"compactedLedger":{"ledgerId":-1,"entries":-1,"size":-1,"offloaded":false,"underReplicated":false}},"persistent://public/default/test-topic-2-partition-2":{"entriesAddedCounter":46995,"numberOfEntries":46995,"totalSize":80445417,"currentLedgerEntries":46995,"currentLedgerSize":80445417,"lastLedgerCreatedTimestamp":"2023-03-08T15:47:07.43+08:00","waitingCursorsCount":0,"pendingAddEntriesCount":0,"lastConfirmedEntry":"118:46994","state":"LedgerOpened","ledgers":[{"ledgerId":118,"entries":0,"size":0,"offloaded":false,"underReplicated":false}],...
```
**Step 5:** Delete the topic _test-topic-2_.
**Input**
```
curl -X DELETE http://localhost:8080/admin/v2/persistent/public/default/test-topic-2/partitions
```
**Output**
There is no output. You can verify whether the _test-topic-2_ exists or not using the following command.
**Input**
List topics in `public/default` namespace.
```
curl -X GET http://localhost:8080/admin/v2/persistent/public/default
```
</TabItem>
<TabItem value="Java">
To manage topics using Java admin API, complete following steps.
1. Initiate a Pulsar Java client.
2. Create a partitioned topic
3. Update the number of a partition.
4. Produce messages to the topic.
5. Check the stats of the topic.
6. Delete the topic.
**Prerequisites**
- Prepare a Java project and add the following dependency to your POM file.
```java
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client-admin</artifactId>
<version>2.11.0</version>
</dependency>
```
**Steps**
**Step 1:** Initiate a Pulsar Java client in your Java project.
**Input**
```java
String url = "http://localhost:8080";
PulsarAdmin admin = PulsarAdmin.builder()
.serviceHttpUrl(url)
.build();
```
**Step 2:** Create a partitioned topic _test-topic-1_ with 4 partitions.
**Input**
```java
admin.topics().createPartitionedTopic("persistent://public/default/test-topic-1", 4);
```
**Step 3:** Update the number of the partition to 5.
**Input**
```java
admin.topics().updatePartitionedTopic("test-topic-1", 5);
```
**Step 4:** Produce some messages to the topic _test-topic-1_.
**Input**
```java
PulsarClient client = PulsarClient.builder()
.serviceUrl("pulsar://localhost:6650")
.build();
Producer<String> producer = client.newProducer(Schema.STRING)
.topic("test-topic-1")
.blockIfQueueFull(true)
.create();
for (int i = 0; i < 100; ++i) {
producer.newMessage().value("test").send();
}
producer.close();
client.close();
```
**Step 5:** Check the stats of the topic _test-topic-1_.
**Input**
```java
PartitionedTopicStats stats = admin.topics().getPartitionedStats("persistent://public/default/test-topic-1",false);
System.out.println(stats.getMsgInCounter());
```
**Output**
```java
100
```
**Step 6:** Delete the topic _test-topic-1_.
**Input**
```java
admin.topics().deletePartitionedTopic("test-topic-1");
```
</TabItem>
</Tabs>
## Related topics
- To understand basics, see [Pulsar admin API - Overview](admin-api-overview.md)
- To learn usage scenarios, see [Pulsar admin API - Use cases](admin-api-use-cases.md).
- To learn common administrative tasks, see [Pulsar admin API - Features](admin-api-features.md).
- To perform administrative operations, see [Pulsar admin API - Tools](admin-api-tools.md).
- To check the detailed usage, see the references below.
- [pulsar-admin CLI](pathname:///reference/#/@pulsar:version_reference@/pulsar-admin/)
- Pulsar admin APIs
- [REST API](reference-rest-api-overview.md)
- [Java admin API](/api/admin/)