簡體   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