spring boot 通过 `kafkaadmin` 提供的 `createormodifytopics()` 方法,支持在运行时安全地增加已有 kafka 主题的分区数,无需手动校验分区是否存在,只需传入目标分区总数即可。
在 Kafka 中,主题的分区数只能增加,不能减少,且该操作是幂等、线程安全的——多次调用相同参数不会引发错误,仅当目标分区数大于当前值时才会触发实际扩容。Spring Kafka 将这一原生能力封装在 KafkaAdminOperations 接口中,推荐直接使用 createOrModifyTopics(),而非自行遍历 TopicDescription 判断分区 ID 是否“缺失”。
✅ 正确做法:使用 createOrModifyTopics()
@Autowired
private KafkaAdmin kafkaAdmin;
public void ensureTopicHasAtLeastPartitions(String topicName, int minPartitions) {
NewTopic newTopic = new NewTopic(topicName, minPartitions, (short) 1); // 副本因子保持不变
kafkaAdmin.createOrModifyTopics(newTopic);
}
调用示例(将 games 主题扩容至至少 8 个分区):