前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flink Window触发机制

Flink Window触发机制

作者头像
大数据真好玩
发布2019-12-02 21:16:48
2.3K0
发布2019-12-02 21:16:48
举报
文章被收录于专栏:暴走大数据暴走大数据

Flink的Window类型

Flink基本分有3种window类型:CountWindow,TimeWindow和SessionWindow。 其中,CountWindow和TimeWindow还有滑动与滚动区分。

通常,window的api定义形式为:

代码语言:javascript
复制
stream
      .keyBy(...)
      .window(...)   // timeWindow,countWindow,SessionWindows.withGap(Time.minutes(10))
      [.trigger(...)]
      [.evictor(...)]
      [.allowedLateness()]
      .reduce/fold/apply()

窗口函数有哪些

定义完窗口分配器后,需要指定在每个窗口上执行的计算,这就是窗口函数的职责。 在了解有哪些窗口函数之前,有必要了解Window的聚合分类: 全量聚合:简单点说是等属于窗口的数据到齐之后,才开始进行聚合计算;即全量聚合在未触发之前,会保存之前的状态,在最后窗口触发时,才会进行计算。(所以全量聚合的压力会很大。) 常见的窗口函数: apply(WindowFunction) --- 不过1.3之后被弃用 process(processWindowFunction)

增量聚合:窗口每进入一条数据,就进行一次计算。 reduce(reduceFunction); fold; aggregate(aggregateFunction); sum(key);min(key);max(key) sumBy(key);minBy(key);maxBy(key)

我们需要根据业务场景需要,决定使用是全量聚合还是增量聚合,并进一步选择使用哪一种聚合函数。

Window何时会被触发

Window何时被触发计算,是由触发器Trigger的onElement方法所决定。

该方法的参数: (1)element:到达的元素 (2)timestamp:元素达到的时间戳 (3)window:元素将被分配的窗口 (4)context:上下文

以时间类型设置为EventTime之后,触发器就是EventTimeTrigger,对应的onElement方法:

方法很简单:如果当前的watermark已经大于或等于窗口的最大时间戳(即窗口的endTime),那么就会触发窗口计算,并输出结果。 TriggerResult.FIRE:窗口计算并输出结果,尽管未清除窗口,但保留了所有元素。 否则的话,就是注册一个以窗口的最大时间戳为时间的定时器。

window.maxTimestamp()

这里的end是指窗口的结束时间,通常是在WindowAssigner中指定,WindowAssigner有:

以TumblingEventTimeWindows为例:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据真好玩 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • window.maxTimestamp()
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档