用spring管理kafka主题

up9lanfz  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(385)

我们计划在应用程序中使用kafka进行排队。我在兔子和Spring有一些经验。
使用rabbitmq和spring,我们可以在启动spring服务时管理队列创建。
对于Kafka,我不确定什么是创造主题的最佳方式?有没有办法用spring来管理主题。
或者,我们应该写一个单独的脚本来帮助创建主题吗?维护一个单独的脚本来创建主题对我来说似乎有点奇怪。
如有任何建议,我们将不胜感激。

fjnneemd

fjnneemd1#

要在spring boot中自动创建kafka主题,只需要以下内容:

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

    //foo: topic name
    //10: number of partitions
    //2: replication factor
}

kafka管理员是由springboot自动创建和配置的。
SpringKafka的2.3版引入了topicbuilder类,使构建主题更加流畅和直观:

@Bean
public NewTopic topic(){
    return TopicBuilder.name("foo")
        .partitions(10)
        .replicas(2)
        .build();
}
a11xaf1n

a11xaf1n2#

在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

还要注意的是,自从Kafka1.1.0 auto.create.topics.enable 默认情况下启用(请参阅代理配置)。
有关更多信息,请参阅 Spring Kafka文档

相关问题