我正在数据流上执行功能,

DataStream<Tuple4<String,String,Double,Double>> price_warning=datastream_in .flatMap(new Splitter())// transformation flatmap .keyBy(2) .window(SlidingProcessingTimeWindows.of(Time.seconds(180),Time.seconds(10))) .trigger(new ElementTimeTrigger()) .apply(new WindowFunction());

这是我的代码的一部分,只是出于我正在做什么的想法。在这里,在数据流上,我正在做平面映射以将datastream_in解析为Tuple,然后在第二个元组字段中,该流是keyby。之后,我应用滑动窗口,后跟trigger。在这里,我使用onElement()方法进行触发。最后,我将apply用作自定义函数。

当我运行代码时,对我解析的每条消息,apply函数都会被调用18次(180/10,参考滑动窗口)。背后的原因可能是什么?
触发器如何与滑动窗口一起工作?

**如有必要,我也可以提供完整的代码。

最佳答案

Trigger告诉应该在哪里发出窗口。在您的情况下,如果我理解正确,您会触发进入流的每个元素的窗口发射,即数字18。SlidingProcessingTimeWindow已经具有默认触发器,当处理时间超过窗口结束时,它将触发窗口。

有关Trigger概念的更多信息,您可以阅读this

关于java - Flink:Trigger.onElement工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41477237/

10-12 23:56