如何在flink中立即调用流程函数?

时间:2019-09-12 04:40:12

标签: apache-flink flink-streaming

我有一个简单的apache-flink代码,如下所示:

// Parse the data, group it, window it, and aggregate the counts
DataStream<WordWithCount> windowCounts = source
        .flatMap(new FlatMapFunction<String, WordWithCount>() {
            @Override
            public void flatMap(String value, Collector<WordWithCount> out) {
                for (String word : value.split(" ")) {
                    out.collect(new WordWithCount(word, 1));
                }
            }
        })
        .keyBy("word")
        .timeWindow(Time.seconds(PROCESSING_WINDOW_TIME))
        .process(new WordProcessingWindowFunction());

在flatMap函数中,如果我发现单词的条件并想立即触发流程函数,该怎么办? 预先感谢!

2 个答案:

答案 0 :(得分:0)

您可以使用自定义触发器来触发时间窗口,以防出现预期的元素。

.timeWindow(Time.seconds(PROCESSING_WINDOW_TIME))
.trigger(new YourCustomTrigger())
.xxx

答案 1 :(得分:0)

或者,您可以在flatMap之后拆分流(或将flatMap替换为使用侧面输出的ProcessFunction),然后通过窗口及其ProcessWindowFunction发送一个输出流,并通过特殊字词发送另一个流其他一些(相关)功能。最后,如果需要,您可以使用联合将流融合在一起。