我正在尝试以编程方式(Java)获取并设置Kafka集群中某些主题集的保留时间。
似乎无法使用org.apache.kafka.clients.admin.AdminClient
。
除了命令行实用程序以外,还有其他方法吗?
答案 0 :(得分:0)
有一个kafka.admin.TopicCommand
Scala类,这是kafka-topics
shell脚本从Kafka二进制发行版中使用的类:
您可以使用它,尽管您需要将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是值得关注的一个。