I'm following this example: link
So application.yml file looks like this:
spring.cloud.stream.kafka.streams.binder.configuration.commit.interval.ms: 1000
spring.cloud.stream.kafka.streams.binder.configuration:
default.key.serde: org.apache.kafka.common.serialization.Serdes$StringSerde
default.value.serde: org.apache.kafka.common.serialization.Serdes$StringSerde
spring.cloud.stream.bindings.process-out-0:
destination: english-counts
spring.cloud.stream.bindings.process-out-1:
destination: french-counts
spring.cloud.stream.bindings.process-out-2:
destination: spanish-counts
spring.cloud.stream.bindings.process-in-0:
destination: words
spring.application.name: kafka-streams-branching-sample
How can I do something like this? Even though this is not good enough for my case..
public static class WordCountProcessorApplication {
@Bean
@SuppressWarnings("unchecked")
public Function<KStream<Object, String>, KStream<?, WordCount>[]> process() {
Predicate<Object, WordCount> isEnglish = (k, v) -> v.word.equals(bindings.process-out-0.value);
Predicate<Object, WordCount> isFrench = (k, v) -> v.word.equals(bindings.process-out-1.value);
Predicate<Object, WordCount> isSpanish = (k, v) -> v.word.equals(bindings.process-out-2.value);
return input -> input
.branch(isEnglish, isFrench, isSpanish);
}
}
Or even better: because I need this to be as dynamic as possible for my case.
public static class WordCountProcessorApplication {
@Bean
@SuppressWarnings("unchecked")
public Function<KStream<Object, String>, KStream<?, WordCount>[]> process() {
Predicate[] isBranched = (k, v) -> v.word.equals(bindings.process-out.values);
return input -> input
.branch(isBranched);
}
}