在 Java 中增加主题的分区数

Abh*_*rai 4 java configuration apache-kafka

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

And*_*hoi 6

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

AdminClients.createPartitions 方法 API 文档

public abstract CreatePartitionsResult createPartitions(java.util.Map<java.lang.String,NewPartitions> newPartitions,CreatePartitionsOptions options)
Run Code Online (Sandbox Code Playgroud)

根据对应的值增加作为newPartitions的key给出的topic的partition数。如果为具有键的主题增加分区,则会影响分区逻辑或消息的顺序。

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

在此方法返回成功后,所有代理可能需要几秒钟才能知道分区已创建。在此期间,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();
}
Run Code Online (Sandbox Code Playgroud)

  • 完整答案,太好了!非常感谢 (2认同)