Kafka Admin:如何以编程方式显示和设置每个主题的保留时间?

时间:2019-02-20 18:11:57

标签: apache-kafka

我正在尝试以编程方式(Java)获取并设置Kafka集群中某些主题集的保留时间。

似乎无法使用org.apache.kafka.clients.admin.AdminClient

除了命令行实用程序以外,还有其他方法吗?

2 个答案:

答案 0 :(得分:0)

有一个kafka.admin.TopicCommand Scala类,这是kafka-topics shell脚本从Kafka二进制发行版中使用的类:

https://github.com/apache/kafka/blob/a421dd2a26ca140f821cd5be1a4f716cf04beb43/core/src/main/scala/kafka/admin/TopicCommand.scala#L302-L318

您可以使用它,尽管您需要将kafka软件包作为项目的依赖项包括在内,而不仅仅是Kafka客户端。

如果您使用的是针对Scala 2.12编译的Kafka 2.1.1,则类似的事情:

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.12</artifactId>
    <version>2.1.1</version>
</dependency>

https://mvnrepository.com/artifact/org.apache.kafka/kafka_2.12/2.1.1

答案 1 :(得分:0)

要模拟kafka-configs --entity-type topics --entity-name "topic" --describe,您应该可以使用类似的AdminClient#describeConfigs

在这里,我仅过滤出用户明确定义的配置。如果删除过滤器,您还将获得所有主题级别和代理级别的默认配置

Optional<List<ConfigEntry>> dynamicTopicConfigEntries;

try {
    // given org.apache.kafka.client.admin.AdminClient
    ConfigResource resource = new ConfigResource(ConfigResource.Type.TOPIC, "topic");

    dynamicTopicConfigEntries = Optional.of(adminClient.describeConfigs(Collections.singletonList(resource))
            .all()
            .thenApply(configMap -> configMap.get(resource).entries()
                    .stream().filter(e -> e.source() == ConfigEntry.ConfigSource.DYNAMIC_TOPIC_CONFIG)
                    .collect(toList())
            )
            .get());
} catch (InterruptedException | ExecutionException e) {
    throw new RuntimeException("Unable to get topic description");
}

类似地,该命令支持--alter标志(没有可用的代码)

另外,KIP-248是值得关注的一个。