我正在编写一个应用程序,通过Java API对kafka主题执行一系列操作。我能够创建主题并添加分区。我需要帮助获取主题元数据(例如分区,代理)和配置以及更新配置。
供参考,我想更新此处提供的主题级配置 - https://kafka.apache.org/documentation#configuration,例如cleanup.policy,compression.type等
答案 0 :(得分:3)
您可以使用以下代码打印主题级配置。更新配置的用法类似。
String [] args = {" - zookeeper"," localhost:2181", " - 实体类型","主题"," - 实体名称","测试"," - 描述"};
ConfigCommand.main(参数);
关于获取元数据,请参阅https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example中的查找主题和分区的主要经纪人:
已添加:使用AdminUtils添加配置提取和更新示例:
var divNode = htmldoc.DocumentNode.Descendants().
Where(x => x.Name == "div" && x.Attributes["rel"].Value == "1").
FirstOrDefault();
答案 1 :(得分:0)
将我的答案链接到一个类似的问题,这是如何获取Java中某个主题的配置。 Apache Kafka Client (Java) : List topics and check whether topic is log compacted
要点是,您需要创建一个AdminClient
,然后创建一个ConfigResource
属性的集合,调用describeConfigs
方法并解析并遍历DescribeConfigsResult
来查找您要查找的特定配置。
这是代码,上面的链接在我的答案中提供了更多解释。
import org.apache.kafka.clients.admin.AdminClient;
import java.util.*;
import org.apache.kafka.clients.admin.Config;
import org.apache.kafka.clients.admin.ConfigEntry;
import org.apache.kafka.clients.admin.DescribeConfigsResult;
import org.apache.kafka.common.config.ConfigResource;
admin = AdminClient.create(properties);
Collection<ConfigResource> cr = Collections.singleton( new ConfigResource(ConfigResource.Type.TOPIC, "<Your Topic Name>")
DescribeConfigsResult ConfigsResult = admin.describeConfigs(cr));
Config all_configs = (Config)ConfigsResult.all().get().values().toArray()[0];
Iterator ConfigIterator = all_configs.entries().iterator();
while (ConfigIterator.hasNext())
{
ConfigEntry currentConfig = (ConfigEntry) ConfigIterator.next();
if (currentConfig.name().equals("cleanup.policy")) {
System.out.println(currentConfig.value());
}
}