Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
增加Java中主题的分区数_Java_Apache Kafka_Configuration - Fatal编程技术网

增加Java中主题的分区数

增加Java中主题的分区数,java,apache-kafka,configuration,Java,Apache Kafka,Configuration,我正在使用名称:kafka_2.12版本:2.3.0。根据流量/负载,我想更改主题的最大分区数。一旦Kafka启动,是否可以进行这种更改?是否可以通过代码进行更改?是的,您可以通过代码增加分区。使用AdminClient.createPartitions方法。 public abstract createPartitions结果createPartitions(java.util.Map newPartitions,createPartitions选项) 根据相应的值增加作为newParti

我正在使用名称:kafka_2.12版本:2.3.0。根据流量/负载,我想更改主题的最大分区数。一旦Kafka启动,是否可以进行这种更改?是否可以通过代码进行更改?

是的,您可以通过代码增加分区。使用AdminClient.createPartitions方法。

public abstract createPartitions结果createPartitions(java.util.Map newPartitions,createPartitions选项)
根据相应的值增加作为newPartitions键的主题的分区数如果为具有密钥的主题增加分区,则分区逻辑或消息顺序将受到影响。

此操作不是事务性的,因此它可能在某些主题中成功,而在其他主题中失败

此方法返回成功后,所有代理可能需要几秒钟才能意识到分区已创建。在此期间,describeTopics(集合)可能不会返回有关新分区的信息

如何使用:

public static void createPartitions(String topicName, int numPartitions) {
    Properties props = new Properties();
    props.put("bootstrap.servers","localhost:9092");
    AdminClient adminClient = AdminClient.create(props);

    Map<String, NewPartitions> newPartitionSet = new HashMap<>();
    newPartitionSet.put(topicName, NewPartitions.increaseTo(numPartitions));
    adminClient.createPartitions(newPartitionSet);
    adminClient.close();
}
publicstaticvoidcreatepartitions(字符串topicName,int numPartitions){
Properties props=新属性();
put(“bootstrap.servers”,“localhost:9092”);
AdminClient=AdminClient.create(props);
Map newPartitionSet=newhashmap();
newPartitionSet.put(topicName,NewPartitions.increaseTo(numPartitions));
createPartitions(newPartitionSet);
adminClient.close();
}

对于问题的Java部分,请检查Kafka Admin API(),如果您有任何具体问题,请返回。请提供代码片段或链接,我可以跟进。Thanks@AbhishekGharai我修改了答案。请参考示例代码。Anderson Choi感谢您的帮助。我已经使用了您的代码,但是当使用它来增加分区时,我得到以下响应:代理不支持创建分区。我的分区也不是increasing@AbhishekGharaicreatePartitions()方法,该方法要求的最低代理版本为1.0.0。签出您的代理版本。请参考链接。完整的答案,太好了!非常感谢
public static void createPartitions(String topicName, int numPartitions) {
    Properties props = new Properties();
    props.put("bootstrap.servers","localhost:9092");
    AdminClient adminClient = AdminClient.create(props);

    Map<String, NewPartitions> newPartitionSet = new HashMap<>();
    newPartitionSet.put(topicName, NewPartitions.increaseTo(numPartitions));
    adminClient.createPartitions(newPartitionSet);
    adminClient.close();
}