I am creating a spring-boot application which will create multiple topics. I am taking the list of topic names and configurations from a .csv file. I am trying this code but it can only create a single topic but its not favorable to create multiple topics using this. Is there a way to create multiple topics using spring?
@Bean
public KafkaAdmin admin(){
Map<String, Object> configs = new HashMap<>();
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");
return new KafkaAdmin(configs);
}
@Bean
public NewTopic topic1() {
NewTopic topic = new NewTopic(String.format("topic%d",1), 10, (short) 1);
Map<String, String> extraTopicConfig = new HashMap<String, String>();
extraTopicConfig.put(TopicConfig.CLEANUP_POLICY_CONFIG, "compact");
extraTopicConfig.put(TopicConfig.MIN_IN_SYNC_REPLICAS_CONFIG, "1");
topic.configs(extraTopicConfig);
return topic;
}
I came upon this old question looking for an answer. I solved it like this:
@Configuration
public class TopicCreation {
final String[] topicNames = new String[] {"topic1", "topic2"};
final SingletonBeanRegistry beanRegistry;
public TopicCreation(GenericApplicationContext context) {
this.beanRegistry = context.getBeanFactory();
}
@PostConstruct
public void createTopics() {
for (String topic : topicNames) {
NewTopic newTopic = TopicBuilder.name(topic)
.replicas(1)
.partitions(1)
.build();
beanRegistry.registerSingleton("topic-" + topic, newTopic);
}
}
}
For anyone who is struggling to programmatically create multiple topics or topics on different brokers during start-up, consider using ApplicationRunner. Similar to what has been described in the accepted answer here .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.