KStream将记录发送到多个流(不是分支)

时间:2019-01-06 01:05:43

标签: apache-kafka apache-kafka-streams spring-kafka

是否有一种方法可以进行类似分支的操作​​,但可以将记录放置在谓词评估为true的每个输出流中? Brach将记录放置在第一个匹配项上(文档:记录被放置到一个并且在第一个匹配项上只有一个输出流)。

2 个答案:

答案 0 :(得分:3)

您可以“广播”并分别过滤每个流:

KStream stream = ...

stream1 = stream.filter(...);
stream2 = stream.filter(...);
// and so on...

如果您多次使用stream变量,则所有记录将广播到所有下游过滤器(或任何其他运算符),即,对每个记录执行每个过滤器。

答案 1 :(得分:0)

我认为您可以使用类似这样的东西:

KStream<String, String> inputStream = builder.stream("input");
List<Predicate<String, String>> predicates = new ArrayList<>(); // <-- list of predicates
List<KStream<String, String>> kStreams = predicates.stream()
        .map(inputStream::branch)
        .map(Arrays::asList)
        .map(listOfOneElementKStreams -> listOfOneElementKStreams.get(0)).collect(Collectors.toList());