使用spring @Bean创建kafka主题?

时间:2017-09-15 05:28:47

标签: spring-boot apache-kafka spring-kafka

是否可以使用spring bean创建kafka主题。就像我们在RabbitMQ中有Queue和TopicExchanges一样,可以像这样以编程方式创建。

@Bean
Queue queue(){
  return new Queue("name");
}

试过文档无法得到很多帮助。

2 个答案:

答案 0 :(得分:3)

是的,现在可以使用最新的Spring Kafka版本1.3https://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();
}