用spring来管理Kafka主题

时间:2018-06-18 12:23:57

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

我们计划在我们的应用程序中使用Kafka进行排队。我在RabbitMQ和Spring方面有一些经验。

使用RabbitMQ和Spring,我们曾经在启动spring服务时管理队列创建。

对于Kafka,我不确定创建主题的最佳方式是什么?有没有办法用Spring管理主题。

或者,我们是否应该编写一个有助于创建主题的单独脚本?维护一个单独的脚本来创建主题对我来说似乎有点奇怪。

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:5)

在Spring中,可以使用bean在应用程序启动期间创建主题:

@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);
}

或者,您可以通过自动装配AdminClient来编写自己的创建主题,例如从输入文件中读取列表或指定分区号等高级属性:

@Autowired
private KafkaAdmin admin;
//...your implementation

另请注意,由于默认情况下启用了Kafka 1.1.0 auto.create.topics.enablesee Broker configs)。

有关更多信息,请参阅spring-kafka docs

答案 1 :(得分:0)

要在Spring Boot中自动创建Kafka主题,只需这是必需的:

@Bean
public NewTopic topic1() {
    return new NewTopic("foo", 10, (short) 2);
}

Kafka Admin由Spring Boot自动创建和配置。