是否可以使用spring bean创建kafka主题。就像我们在RabbitMQ中有Queue和TopicExchanges一样,可以像这样以编程方式创建。
@Bean
Queue queue(){
return new Queue("name");
}
试过文档无法得到很多帮助。
答案 0 :(得分:3)
是的,现在可以使用最新的Spring Kafka版本1.3
:https://docs.spring.io/spring-kafka/docs/1.3.0.RC1/reference/html/_reference.html#_configuring_topics。
@Bean
public KafkaAdmin admin() {
Map<String, Object> configs = new HashMap<>();
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG,
StringUtils.arrayToCommaDelimitedString(kafkaEmbedded().getBrokerAddresses()));
return new KafkaAdmin(configs);
}
@Bean
public NewTopic topic1() {
return new NewTopic("foo", 10, (short) 2);
}
但请注意,由于Apache Kafka 0.11.0.x
的改进,这是可能的。
答案 1 :(得分:1)
版本2.3引入了一个新类TopicBuilder
,以使创建此类bean更方便:configuring-topics
如果在应用程序上下文中定义KafkaAdmin bean,则可以 自动将主题添加到代理。为此,您可以添加一个 NewTopic @Bean为应用程序上下文中的每个主题。版本2.3 引入了新类TopicBuilder来创建此类bean 更方便。以下示例显示了如何执行此操作:
@Bean
public KafkaAdmin admin() {
Map<String, Object> configs = new HashMap<>();
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, ...);
return new KafkaAdmin(configs);
}
@Bean
public NewTopic topic1() {
return TopicBuilder.name("thing1")
.partitions(10)
.replicas(3)
.compact()
.build();
}