forked from vert-x3/vertx-kafka-client
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request vert-x3#122 from vert-x3/kafka-admin-client
Added initial Kafka Admin Client implementation
- Loading branch information
Showing
22 changed files
with
2,531 additions
and
168 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
= Vert.x Kafka Admin Client | ||
:toc: left | ||
:lang: $lang | ||
:$lang: $lang | ||
|
||
This component provides a Vert.x wrapper around the Kafka Admin Client API. | ||
The Kafka Admin Client is used to create, modify, and delete topics. | ||
It also provides methods for handling ACLs (Access Control Lists), consumer groups and many more. | ||
|
||
== Creating the Kafka Admin Client | ||
|
||
Creating the admin client is quite similar on how it works using the native Kafka client library. | ||
|
||
It needs to be configured with a bunch of properties as described in the official | ||
Apache Kafka documentation, for the link:https://kafka.apache.org/documentation/#adminclientconfigs[admin]. | ||
|
||
To achieve that, a map can be configured with such properties passing it to one of the | ||
static creation methods exposed by {@link io.vertx.kafka.admin.KafkaAdminClient}. | ||
|
||
[source,$lang] | ||
---- | ||
{@link examples.KafkaAdminClientExamples#exampleCreateAdminClient} | ||
---- | ||
|
||
== Using the Kafka Admin Client | ||
|
||
=== Listing topics | ||
|
||
You can call the {@link io.vertx.kafka.admin.KafkaAdminClient#listTopics} for listing the topics in the cluster. | ||
The only parameter is the usual callback to handle the result, which provides the topics list. | ||
|
||
[source,$lang] | ||
---- | ||
{@link examples.KafkaAdminClientExamples#exampleListTopics} | ||
---- | ||
|
||
=== Describe topics | ||
|
||
You can call {@link io.vertx.kafka.admin.KafkaAdminClient#describeTopics} to describe topics in the cluster. | ||
Describing a topic means getting all related metadata like number of partitions, replicas, leader, in-sync replicas and so on. | ||
The needed parameters are the list of topics names to describe, and the usual callback to handle the result providing | ||
a map with topic names and related {@link io.vertx.kafka.admin.TopicDescription}. | ||
|
||
[source,$lang] | ||
---- | ||
{@link examples.KafkaAdminClientExamples#exampleDescribeTopics} | ||
---- | ||
|
||
=== Create topic | ||
|
||
You can call {@link io.vertx.kafka.admin.KafkaAdminClient#createTopics} to create topics in the cluster. | ||
The needed parameters are the list of the topics to create, and the usual callback to handle the result. | ||
The topics to create are defined via the {@link io.vertx.kafka.admin.NewTopic} class specifying the name, the number of | ||
partitions and the replication factor. | ||
It is also possible to describe the replicas assignment, mapping each replica to the broker id, instead of specifying the | ||
number of partitions and the replication factor (which in this case has to be set to -1). | ||
|
||
[source,$lang] | ||
---- | ||
{@link examples.KafkaAdminClientExamples#exampleCreateTopics} | ||
---- | ||
|
||
=== Delete topic | ||
|
||
You can call {@link io.vertx.kafka.admin.KafkaAdminClient#deleteTopics} to delete topics in the cluster. | ||
The needed parameters are the list of the topics to delete, and the usual callback to handle the result. | ||
|
||
[source,$lang] | ||
---- | ||
{@link examples.KafkaAdminClientExamples#exampleDeleteTopics} | ||
---- | ||
|
||
=== Describe configuration | ||
|
||
You can call {@link io.vertx.kafka.admin.KafkaAdminClient#describeConfigs} to describe resources configuration. | ||
Describing resources configuration means getting all configuration information for cluster resources like topics or brokers. | ||
The needed parameters are the list of the resources for which you want the configuration, and the usual callback to handle the result. | ||
The resources are described by a collection of {@link io.vertx.kafka.client.common.ConfigResource} while the result maps | ||
each resource with a corresponding {@link io.vertx.kafka.admin.Config} which as more {@link io.vertx.kafka.admin.ConfigEntry} for | ||
each configuration parameter. | ||
|
||
[source,$lang] | ||
---- | ||
{@link examples.KafkaAdminClientExamples#exampleDescribeConfigs} | ||
---- | ||
|
||
=== Alter configuration | ||
|
||
You can call {@link io.vertx.kafka.admin.KafkaAdminClient#alterConfigs} to alter resources configuration. | ||
Altering resources configuration means updating configuration information for cluster resources like topics or brokers. | ||
The needed parameters are the list of the resources with the related configurations to updated, and the usual callback to handle the result. | ||
It is possible to alter configurations for different resources with just one call. The input parameter maps each | ||
{@link io.vertx.kafka.client.common.ConfigResource} with the corresponding {@link io.vertx.kafka.admin.Config} you want to apply. | ||
|
||
[source,$lang] | ||
---- | ||
{@link examples.KafkaAdminClientExamples#exampleAlterConfigs} | ||
---- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
42 changes: 42 additions & 0 deletions
42
src/main/generated/io/vertx/kafka/admin/ConfigConverter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package io.vertx.kafka.admin; | ||
|
||
import io.vertx.core.json.JsonObject; | ||
import io.vertx.core.json.JsonArray; | ||
import java.time.Instant; | ||
import java.time.format.DateTimeFormatter; | ||
|
||
/** | ||
* Converter for {@link io.vertx.kafka.admin.Config}. | ||
* NOTE: This class has been automatically generated from the {@link io.vertx.kafka.admin.Config} original class using Vert.x codegen. | ||
*/ | ||
public class ConfigConverter { | ||
|
||
public static void fromJson(Iterable<java.util.Map.Entry<String, Object>> json, Config obj) { | ||
for (java.util.Map.Entry<String, Object> member : json) { | ||
switch (member.getKey()) { | ||
case "entries": | ||
if (member.getValue() instanceof JsonArray) { | ||
java.util.ArrayList<io.vertx.kafka.admin.ConfigEntry> list = new java.util.ArrayList<>(); | ||
((Iterable<Object>)member.getValue()).forEach( item -> { | ||
if (item instanceof JsonObject) | ||
list.add(new io.vertx.kafka.admin.ConfigEntry((JsonObject)item)); | ||
}); | ||
obj.setEntries(list); | ||
} | ||
break; | ||
} | ||
} | ||
} | ||
|
||
public static void toJson(Config obj, JsonObject json) { | ||
toJson(obj, json.getMap()); | ||
} | ||
|
||
public static void toJson(Config obj, java.util.Map<String, Object> json) { | ||
if (obj.getEntries() != null) { | ||
JsonArray array = new JsonArray(); | ||
obj.getEntries().forEach(item -> array.add(item.toJson())); | ||
json.put("entries", array); | ||
} | ||
} | ||
} |
Oops, something went wrong.