Java Spring Kafka-动态创建流

Java Spring Kafka-动态创建流,java,spring,apache-kafka,apache-kafka-streams,spring-kafka,Java,Spring,Apache Kafka,Apache Kafka Streams,Spring Kafka,我需要从配置文件动态创建kafka流,其中包含源主题名称和每个流的配置。应用程序需要有几十个卡夫卡流,每个环境(如舞台、产品)的流将不同。 使用springkafkalibrary可以做到这一点吗 我们可以通过卡夫卡流轻松做到这一点: @Bean public List<KafkaStreams> kafkaStreams() { return streamRouteProperties.stream() .map(routeProperty ->

我需要从配置文件动态创建kafka流,其中包含源主题名称和每个流的配置。应用程序需要有几十个卡夫卡流,每个环境(如舞台、产品)的流将不同。 使用
springkafka
library可以做到这一点吗

我们可以通过
卡夫卡流
轻松做到这一点:

@Bean
public List<KafkaStreams> kafkaStreams() {
    return streamRouteProperties.stream()
            .map(routeProperty -> createKafkaStream(routeProperty))
            .collect(toList());
}

private KafkaStreams createKafkaStream(KafkaConfigurationProperties kafkaProperties) {
    StreamsBuilder builder = new StreamsBuilder();
    KStream<Object, String> stream = builder.stream(kafkaProperties.getTopicName());
    Topology topology = builder.build();
    StreamsConfig streamsConfig = new StreamsConfig(kafkaProperties.getSettings());
    return new KafkaStreams(topology, streamsConfig);
}

但是,如何使用
StreamsBuilderFactoryBean
动态创建kafka流列表?

StreamsBuilderFactoryBean只是为Spring应用程序上下文带来了一些自以为是的、方便的API,但这并不意味着您应该始终与之捆绑在一起

幸运的是,
StreamsBuilderFactoryBean
与常规Kafka流相比没有太大的价值。它的最大功能是对内部创建的KafkaStreams进行lfecycle控制


您可以随意使用原始的Kafka Streams API,不要试图将代码过于复杂化,使其成为基于
StreamsBuilderFactoryBean
的您的需求,它实际上是为一组静态选项设计的。

感谢您解释我应该朝哪个方向走
@Bean
public KStream<?, ?> kStream(StreamsBuilder streamsBuilder) {
    Consumed<String, String> consumed = ..;
    KStream<String, String> kStream = streamsBuilder.stream(topicName, consumed);
    kStream.process(() -> eventProcessor);
    return kStream;   
}

@Bean
public FactoryBean<StreamsBuilder> streamsBuilder() {
    return new StreamsBuilderFactoryBean(streamsConfig);
}