从消费者端,是否可以选择使用自定义配置创建主题?

时间:2019-08-23 19:52:00

标签: spring-kafka

我正在使用'org.springframework.kafka.annotation.KafkaListener'(@KafkaListener)注释编写一个kafka使用者。如果该主题不存在,则此注释期望该主题在订阅时会尝试创建该主题。

在我的情况下,我不希望用户使用默认配置创建主题,但应该使用自定义配置(例如分区号,清理策略等)创建主题。春季卡夫卡有什么选择吗?

1 个答案:

答案 0 :(得分:0)

请参阅文档configuring topics

  

如果您在应用程序上下文中定义KafkaAdmin bean,它可以自动将主题添加到代理。为此,您可以将每个主题的NewTopic @Bean添加到应用程序上下文中。以下示例显示了如何执行此操作:

@Bean
public KafkaAdmin admin() {
    Map<String, Object> configs = new HashMap<>();
    configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG,
            StringUtils.arrayToCommaDelimitedString(embeddedKafka().getBrokerAddresses()));
    return new KafkaAdmin(configs);
}

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

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

默认情况下,如果代理不可用,则会记录一条消息,但是上下文会继续加载。您可以以编程方式调用管理员的initialize()方法,以便稍后再试。如果您希望这种情况被认为是致命的,请将管理员的fatalIfBrokerNotAvailable属性设置为true。然后上下文无法初始化。

     

如果代理支持(1.0.0或更高版本),则如果发现现有主题的分区数少于NewTopic.numPartitions,则管理员将增加分区数。

如果您使用的是Spring Boot,则不需要管理Bean,因为Boot会自动为您配置一个。