通过Java API获取和更新Kafka主题配置

时间:2016-11-21 06:17:58

标签: apache-kafka kafka-consumer-api kafka-producer-api

我正在编写一个应用程序,通过Java API对kafka主题执行一系列操作。我能够创建主题并添加分区。我需要帮助获取主题元数据(例如分区,代理)和配置以及更新配置。

供参考,我想更新此处提供的主题级配置 - https://kafka.apache.org/documentation#configuration,例如cleanup.policy,compression.type等

2 个答案:

答案 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());
          }
        }