我正在数据流上执行功能,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/