增加Java中主题的分区数

时间:2019-10-22 13:14:32

标签: java apache-kafka configuration

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

1 个答案:

答案 0 :(得分:1)

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

AdminClients.createPartitions method API document

public abstract CreatePartitionsResult createPartitions(java.util.Map<java.lang.String,NewPartitions> newPartitions,CreatePartitionsOptions options)
  

根据相应的值,增加作为newPartitions关键字给出的主题的分区数。 如果为具有关键字的主题增加了分区,则分区逻辑或消息顺序将受到影响。

     

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

     

此方法返回成功后,可能需要几秒钟,所有代理才能知道已创建了分区。在这段时间内,describeTopics(Collection)可能不会返回有关新分区的信息。

使用方法:

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