乐趣区

关于flink:Flink之流处理概念时间语义Trigger

Flink 的窗口操作

对于 Flink 的窗口操作,尤其是基于事件工夫的窗口操作,大家还要掌三个重要的知识点:

  1. 窗口分配器:就是决定着流入 flink 的数据,该属于哪个窗口。
  2. 工夫戳抽取器 /watermark 生成器:抽取工夫戳并驱动着程序失常执行。
  3. trigger:决定着数据啥时候落地。

数据流入 flink 的 source 之后,如果须要窗口函数,咱们就要应用肯定的规定来判断或者叫决定该数据应该属于哪个窗口,而后是窗口要是基于事件工夫的话咱们还要提供工夫戳抽取器和 watermark 分配器,最初还要指定 满足何种条件触发窗口计算 并输入后果。

那这里可能会说了,触发窗口计算不就是工夫到窗口完结工夫了间接输入 不就行了吗?

实际上是不行的,基于事件工夫解决机制,数据会在有些意想不到的状况下滞后,比方 forward 故障等。这种状况,对于 flink 来说咱们能够设置一些参数来容许解决滞后的元素,比方容许其滞后一小时,那么这个时候实际上窗口输入距离就是要加上这个滞后工夫了。这时候如果咱们 想要尽可能的实时输入的话,就要用到 flink 的 trigger 机制。

Trigger 机制

Trigger 定义了 何时开始应用窗口计算函数 计算窗口。每个窗口分配器都会有一个默认的 Trigger。如果,默认的 Trigger 不能满足你的需要,你能够指定一个自定义的 trigger()。

  • onElement(): 进入窗口的每个元素都会调用该办法。
  • onEventTime(): 事件工夫 timer 触发的时候被调用。
  • onProcessingTime(): 解决工夫 timer 触发的时候会被调用。
  • onMerge(): 有状态的触发器相干,并在它们相应的窗口合并时合并两个触发器的状态,例如应用会话窗口。
  • clear(): 该办法次要是执行窗口的删除操作。
TriggerResult
  • CONTINUE: 什么都不做。
  • FIRE: 触发计算。
  • PURE: 革除窗口的元素。
  • FIRE_AND_PURE: 触发计算和革除窗口元素。
内置和自定义触发器
  • EventTimeTrigger:基于事件工夫和 watermark 机制来对窗口进行触发计算。
  • ProcessingTimeTrigger: 基于解决工夫触发。
  • CountTrigger: 窗口元素数超过事后给定的限度值的话会触发计算。
  • PurgingTrigger 作为其它 trigger 的参数,将其转化为一个 purging 触发器。
退出移动版