Search code examples
spring-kafka

Spring Kafka bean return types


The documentation for spring kafka stream support shows something like:

@Bean
public KStream<Integer, String> kStream(StreamsBuilder kStreamBuilder) {
    KStream<Integer, String> stream = kStreamBuilder.stream("streamingTopic1");
// ... stream config
    return stream;
}

However, I might want a topology dependent on multiple streams or tables. Can I do:

@Bean
public KStream<Integer, String> kStream(StreamsBuilder kStreamBuilder) {
    KStream<Integer, String> stream1 = kStreamBuilder.stream("streamingTopic1");
    KStream<Integer, String> stream2 = kStreamBuilder.stream("streamingTopic1");
// ... stream config
    return stream;
}

In other words, is the bean returned relevant, or is it only important that kStreamBuilder is being mutated?


Solution

  • It depends.

    If you don't need a reference to the KStream elsewhere, there is no need to define it as a bean at all you can auto wire the StreamsBuilder which is created by the factory bean.

    If you need a reference, then each one must be its own bean.

    For example, Spring Cloud Stream builds a partial stream which the application then modifies. See here.