Java 无法使用kafka管理客户端API创建具有所需分区的kafka主题

Java 无法使用kafka管理客户端API创建具有所需分区的kafka主题,java,apache-kafka,Java,Apache Kafka,我正在使用Kafka管理客户端API创建主题。正在创建主题,但是默认情况下,主题是使用1个分区创建的。API不遵守提供的可配置值。不确定我是否正确使用了它 注意:主题创建是在代理级别启用的。主题也正在创建中,但它是使用分区1创建的 NewTopic newTopic = new NewTopic(TOPIC_NAME, 10, (short) 1); CreateTopicsResult createTopicsResult = null; try {

我正在使用Kafka管理客户端API创建主题。正在创建主题,但是默认情况下,主题是使用1个分区创建的。API不遵守提供的可配置值。不确定我是否正确使用了它

注意:主题创建是在代理级别启用的。主题也正在创建中,但它是使用分区1创建的

NewTopic newTopic = new NewTopic(TOPIC_NAME, 10, (short) 1);
        CreateTopicsResult createTopicsResult = null;
        try {
            createTopicsResult = KafkaAdminClient.create(getAdminProperties()).createTopics(Collections.singletonList(newTopic));
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

但是,我能够使用Kafka Admin Client API增加早期创建主题的分区,我尝试使用以下代码复制此分区,但没有成功:

import org.apache.kafka.clients.admin.AdminClient;
导入org.apache.kafka.clients.admin.AdminClientConfig;
导入org.apache.kafka.clients.admin.CreateTopicsResult;
导入org.apache.kafka.clients.admin.KafkaAdminClient;
导入org.apache.kafka.clients.admin.NewTopic;
导入java.util.Collections;
导入java.util.Properties;
导入java.util.concurrent.ExecutionException;
导入java.util.concurrent.TimeUnit;
导入java.util.concurrent.TimeoutException;
公共类AdminApiDemo{
私有静态最终字符串BOOTSRAP\u SERVER=“localhost:9092”;
私有静态最终字符串主题\u NAME=“demoTopic”;
私有静态final int NUM_分区=3;
私有静态最终短副本数=1;
私人最终管理员客户端管理员客户端;
私有AdminApiDemo(属性){
this.adminClient=KafkaAdminClient.create(属性);
}
公共静态void main(字符串[]args){
最终属性=新属性();
put(AdminClientConfig.BOOTSTRAP\u SERVERS\u CONFIG,BOOTSRAP\u SERVER);
新的AdminApiDemo(properties).createTopic(主题名称、NUM分区、NUM副本);
}
私有void createTopic(字符串topicName、int numPartitions、短numReplicas){
试一试{
最终新主题新主题=新新主题(主题名称、数字部分、数字原则);
最终CreateTopicsResult=adminClient.createTopics(Collections.singletonList(newTopic));
result.values().get(topicName).get(5,TimeUnit.SECONDS);
}捕获(InterruptedException | ExecutionException | TimeoutException e){
e、 printStackTrace();
}
}
}
《卡夫卡主题——描述》展示了以下内容:

root@kafka:/#卡夫卡主题--引导服务器本地主机:9092--描述--主题
主题:demoTopic分区计数:3复制因子:1配置:
主题:降级分区:0领导者:1副本:1 Isr:1
主题:降级分区:1个引导:1个副本:1个Isr:1
主题:降级分区:2个前导:1个副本:1个Isr:1
我想,好吧,如果主题可能在创建之前就存在,那该怎么办?但是我又得到了一个
java.util.concurrent.ExecutionException:org.apache.kafka.common.errors.TopicexistException:topic'demoTopic'已经存在。
,所以这也不可能是您的情况


我知道这不是一个“真正”的答案,它解决了任何问题,对此我很抱歉。但无论如何,我希望这能有所帮助。也许其他人可以使用它在他的设置中复制它,并“看到”问题。

您是否在代理上禁用了自动创建主题?这个主题已经存在了吗?你没有将消费者属性放入管理客户端。这个主题不存在,我只是将代理详细信息放入管理属性。我无法复制。请显示更多配置和代码如果从代码中删除final关键字,问题将被重现。我现在可以使用您的代码创建分区了。我不知道为什么final关键字的约束会导致这种行为。我实际上想不出任何原因,为什么final关键字会导致这种行为,所以我测试了它。我仍然得到了与上一次测试相同的结果,三个分区。你知道吗,如果你可能在测试中改变了其他东西?在每次测试之前,我删除了所有内容,从一个新的卡夫卡设置开始。正如我所想,
createTopic
方法的字节码是完全相同的,所以最后的修饰符不能作为原因。