什么是fluce ReduceFunction的默认触发器?

时间:2018-03-13 08:35:49

标签: apache-flink flink-streaming

WindowFunction的触发器和ReduceFunction的触发器有什么不同?

2 个答案:

答案 0 :(得分:1)

没有“ReduceFunction Trigger”或“WindowFunction Trigger”这样的东西,因为触发器和函数是正交的。在Flink中,窗口操作至少由三部分组成:

  • WindowAssigner:窗口分配器决定每个记录分配到哪个窗口。
  • Function:窗口的函数处理分配给窗口的记录。功能可以是ReduceFunctionAggregateFunctionWindowFunctionProcessWindowFunction。在收到所有记录之前,可以急切地应用ReduceFunctionAggregateFunction。这是有益的,因为以这种方式可以显着减少以窗口状态存储的数据量。 WindowFunctionProcessWindowFunction处理窗口收集的所有记录。也可以组合一个急切的函数(ReduceFunctionAggregateFunction)和一个完整的窗口函数(WindowFunctionProcessFunction)。在这种情况下,记录会被急切地聚合,并且最终的聚合结果将被提供给完整的窗口函数。
  • TriggerTrigger决定何时从窗口操作中发出结果和/或丢弃窗口操作的状态。

将新记录添加到窗口时,始终会立即应用ReduceFunction。当窗口的Trigger触发时,会发出窗口的结果。

答案 1 :(得分:0)

触发器仅适用于Windows。 ReduceFunction不需要触发器,它是一个转换操作,在每个新元素上调用processElement()

简而言之:

ReduceFunction触发每个元素(类似于onElement()窗口触发器)。

WindowFunction按时触发(默认情况下)(事件,处理或摄取)。但它在这方面很灵活,并接受自定义触发器。

有关触发器的更多信息:

https://ci.apache.org/projects/flink/flink-docs-master/dev/stream/operators/windows.html#triggers

默认减少实施:

https://github.com/apache/flink/blob/master/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/operators/StreamGroupedReduce.java