【大数据面试题】003 Flink的时间形式和窗口形式有几种?有什么区别

本文介绍了Flink中Ingestiontime、Processtime和Eventtime的区别,重点讲解了Eventtime窗口(TumblingWindow、SlidingWindow、SessionWindow和GlobalWindow)的应用,以及按键分区对并行度的影响,配合代码实例以帮助理解。
摘要由CSDN通过智能技术生成

一步一个脚印,一天一道大数据面试题。

时间形式:

  • Ingestion time 摄入时间: 进入到 Flink 系统时的时间,比如刚被 Flink 读取时候的时间
  • Process time 处理时间:在 Flink 算子触发,开始处理时的时间,在处理时的系统时间
  • Event time 事件时间:每个传入的数据里往往有自己的时间数据,一般代表该数据的发生时间

目前做的更多用的是 Event time 事件时间,处理的数据里一般带有这个时间的字段。

窗口形式:

  • Tumbling Window 滚动窗口:通过固定窗口大小(时间,或数据量)来对数据进行划分,数据不会重叠
  • Sliding Window 滑动窗口:滑动窗口有固定窗口大小,但有窗口大小滑动步长两个设置。滑动步长代表的是计算频率。如果滑动步长<窗口大小,就会产生重叠。(可以参考贴的尚硅谷的图)
    尚硅谷资料
  • Session Window 会话窗口:数据如果超过了一定时间没来,就划分一个窗口,数据不会重叠
  • Global Window 全局窗口: 这个窗口是没有结束的时候,正常是不会计算的。需要搭配触发器

代码样例:

我觉得来点代码样例会更舒服,这些代码来自尚硅谷。

// 滚动事件时间窗口
stream.keyBy(...)
       .window(TumblingEventTimeWindows.of(Time.seconds(5)))
       .aggregate(...)

// 滑动事件时间窗口
stream.keyBy(...)
       .window(SlidingEventTimeWindows.of(Time.seconds(10)Time.seconds(5)))
       .aggregate(...)

// 会话事件时间窗口
stream.keyBy(...)
       .window(EventTimeSessionWindows.withGap(Time.seconds(10)))
       .aggregate(...)

// 全局窗口
stream.keyBy(...)
       .window(GlobalWindows.create())
       .aggregate(...)

一般用的 Tumbling Window 滚动窗口多一点。

备注

窗口分为是否按键分区,也就是是否使用 keyBy(),如果不是按键分区,并行度只有1,手动调大并行度也没用。所以这个得注意。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值