KStream send record to multiple streams (not Branch)

前端 未结 2 1385
情话喂你
情话喂你 2021-01-22 22:40

Is there a way to make branch-like operation but to place record in each output stream which predicate evaluates to true? Brach puts record to first match (documentation: A reco

相关标签:
2条回答
  • 2021-01-22 23:18

    You can "broadcast" and filter each stream individually:

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

    If you use stream variable multiple times, all records are broadcasted to all downstream filters (or any other operator), ie, each filter is executed for each record.

    0 讨论(0)
  • 2021-01-22 23:24

    I think you can use something like this:

    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());
    
    0 讨论(0)
提交回复
热议问题