|
9 | 9 | import org.apache.kafka.clients.admin.AdminClient;
|
10 | 10 | import org.apache.kafka.clients.admin.Config;
|
11 | 11 | import org.apache.kafka.clients.admin.ListOffsetsResult;
|
| 12 | +import org.apache.kafka.clients.admin.NewTopic; |
12 | 13 | import org.apache.kafka.clients.admin.OffsetSpec;
|
13 | 14 | import org.apache.kafka.clients.admin.TopicDescription;
|
14 | 15 | import org.apache.kafka.common.TopicPartition;
|
15 | 16 | import org.apache.kafka.common.config.ConfigResource;
|
16 | 17 | import org.apache.logging.log4j.LogManager;
|
17 | 18 | import org.apache.logging.log4j.Logger;
|
18 | 19 |
|
| 20 | +import java.util.Collections; |
19 | 21 | import java.util.List;
|
20 | 22 | import java.util.Map;
|
21 | 23 | import java.util.Properties;
|
@@ -84,6 +86,29 @@ public CompletionStage<Set<String>> listTopics() {
|
84 | 86 | return promise;
|
85 | 87 | }
|
86 | 88 |
|
| 89 | + /** |
| 90 | + * Creates a topic with given name |
| 91 | + * |
| 92 | + * @param topicName topic name to create |
| 93 | + * @return a CompletionStage Void |
| 94 | + */ |
| 95 | + public CompletionStage<Void> createTopic(String topicName) { |
| 96 | + log.trace("Create topic thread {}", Thread.currentThread()); |
| 97 | + log.info("Create topic {}", topicName); |
| 98 | + CompletableFuture<Void> promise = new CompletableFuture<>(); |
| 99 | + this.adminClient.createTopics(Collections.singletonList(new NewTopic(topicName, 2, (short) 1))) |
| 100 | + .all() |
| 101 | + .whenComplete((topic, exception) -> { |
| 102 | + log.trace("Create topic callback thread {}", Thread.currentThread()); |
| 103 | + if (exception == null) { |
| 104 | + promise.complete(topic); |
| 105 | + } else { |
| 106 | + promise.completeExceptionally(exception); |
| 107 | + } |
| 108 | + }); |
| 109 | + return promise; |
| 110 | + } |
| 111 | + |
87 | 112 | /**
|
88 | 113 | * Returns the description of the specified topics.
|
89 | 114 | *
|
|
0 commit comments