我使用的名称:Kafka2.12版本:2.3.0。根据流量/负载,我想更改一个主题的最大分区数。一旦Kafka出现,有没有可能做出这样的改变,可以通过代码来完成?
pjngdqdw1#
是的,您可以通过代码增加分区。使用adminclient.createpartitions方法。adminclients.createpartitions方法api文档
public abstract CreatePartitionsResult createPartitions(java.util.Map<java.lang.String,NewPartitions> newPartitions,CreatePartitionsOptions options)
根据相应的值增加作为newpartitions键的主题的分区数。如果为具有键的主题增加分区,则分区逻辑或消息顺序将受到影响。此操作不是事务性的,因此可能对某些主题成功,而对其他主题失败。此方法返回success之后,所有代理可能需要几秒钟才能意识到分区已经创建。在此期间,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(); }
1条答案
按热度按时间pjngdqdw1#
是的,您可以通过代码增加分区。使用adminclient.createpartitions方法。
adminclients.createpartitions方法api文档
根据相应的值增加作为newpartitions键的主题的分区数。如果为具有键的主题增加分区,则分区逻辑或消息顺序将受到影响。
此操作不是事务性的,因此可能对某些主题成功,而对其他主题失败。
此方法返回success之后,所有代理可能需要几秒钟才能意识到分区已经创建。在此期间,describetopics(集合)可能不会返回有关新分区的信息。
使用方法: