繁体   English   中英

用 spring 管理 Kafka Topic

[英]Managing Kafka Topic with spring

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

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

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

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

任何建议将不胜感激。

在 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.enable默认启用(请参阅 Broker 配置)。

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

要在 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 Admin 由 Spring Boot 自动创建和配置。

Spring Kafka 2.3 版本引入了一个TopicBuilder类,使构建主题更加流畅和直观:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM