【问题标题】:Increase number of partitions for a topic in Java在 Java 中增加主题的分区数
【发布时间】:2019-11-04 20:45:53
【问题描述】:

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

【问题讨论】:

标签: java apache-kafka configuration


【解决方案1】:

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

AdminClients.createPartitions method API document

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

根据对应的值增加作为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();
}

【讨论】:

  • 能否请您提供代码 sn-p 或链接,我可以跟进。谢谢
  • @AbhishekGharai 我修改了答案。请参考示例代码。
  • 安德森崔感谢您的帮助。我已经使用了您的代码,但是在使用它来增加我的分区时,我得到了以下响应代理不支持 CREATE_PARTITIONS。我的分区也没有增加
  • @AbhishekGharai createPartitions() 方法,所需的最低代理版本为 1.0.0。检查您的代理版本。请参考链接。 KAFKA-5856KIP-195
  • 谢谢安德森。我在这里有另一个与 Kafka 相关的查询Is it possible to consume kafka messages using key and partition?。你能看看并分享你的反馈吗?非常感谢您在此问题上的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多