由于 PurgingTrigger 的作用,State 中的数据会被清除。
DeltaTrigger DeltaTrigger 的应用有这样一个车辆区间测试的需求,车辆每分钟上报当前位置与车速,每行进10公里,计算区间内最高车速。
触发器原型onElement
onProcessingTime
onEventTime
onMerge
clear
说明TriggerResult可以是以下之一
CONTINUE 什么都不做
FIRE_AND_PURGE 触发计算,然后清除窗口中的元素
FIRE 触发计算 默认情况下,内置的触发器只返回 FIRE,不会清除窗口状态。
PURGE 清除窗口中的元素
所有的事件时间窗口分配器都有一个 EventTimeTrigger 作为默认触发器。一旦 watermark 到达窗口末尾,这个触发器就会被触发。
全局窗口(GlobalWindow)的默认触发器是永不会被触发的 NeverTrigger。因此,在使用全局窗口时,必须自定义一个触发器。
通过使用 trigger() 方法指定触发器,将会覆盖窗口分配器的默认触发器。例如,如果你为 TumblingEventTimeWindows 指定 CountTrigger,
那么不会再根据时间进度触发窗口,而只能通过计数。目前为止,如果你希望基于时间以及计数进行触发,则必须编写自己的自定义触发器。
根据窗口是否调用keyBy算子key化,分为被Keys化Windows和非被Keys化Windows;
根据窗口的驱动方式,分为时间驱动(Time Window)、数据驱动(Count Window);
根据窗口的元素分配方式,分为滚动窗口(tumbling windows)、滑动窗口(sliding windows)、会话窗口(session windows)以及全局窗口(global windows)
被Keys化Windows可以理解为按照原始数据流中的某个key进行分类,拥有同一个key值的数据流将为进入同一个window,多个窗口并行的逻辑流
stream .keyBy(...) <- keyed versus non-keyed windows .window(...) <- required: "assigner" [.trigger(...)] <- optional: "trigger" (else default trigger) [.evictor(...)] <- optional: "evictor" (else no evictor) [.allowedLateness(...)] <- optional: "lateness" (else zero) [.sideOutputLateData(...)] <- optional: "output tag" (else no side output for late data) .reduce/aggregate/fold/apply() <- required: "function" [.getSideOutput(...)] <- optional: "output tag" 非被Keys化Windows
不做分类,每进入一条数据即增加一个窗口,多个窗口并行,每个窗口处理1条数据
WindowAll 将元素按照某种特性聚集在一起,该函数不支持并行操作,默认的并行度就是1,所以如果使用这个算子的话需要注意一下性能问题
stream .windowAll(...) <- required: "assigner" [.trigger(...)] <- optional: "trigger" (else default trigger) [.evictor(...)] <- optional: "evictor" (else no evictor) [.allowedLateness(...)] <- optional: "lateness" (else zero) [.sideOutputLateData(...)] <- optional: "output tag" (else no side output for late data) .reduce/aggregate/fold/apply() <- required: "function" [.getSideOutput(...)] <- optional: "output tag" 区别对于被Key化的数据流,可以将传入事件的任何属性用作键(此处有更多详细信息)。
拥有被Key化的数据流将允许您的窗口计算由多个任务并行执行,因为每个逻辑被Key化的数据流可以独立于其余任务进行处理。
引用相同Keys的所有数据元将被发送到同一个并行任务。