Flink窗口window

  • 窗口:
    一般真实的流都是无界的,窗口可以把无界的流进行切分,得到一个有界流。它会将数据分发到有限大小的桶内进行分析。
    
  • window类型:
    时间窗口 time window:滚动时间窗口,滑动时间窗口,会话窗口。
    计数窗口 count window:滚动计数窗口,滑动计数窗口。
    滚动窗口:tumbling window:将数据依据固定大小的窗口长度对数据进行切分。时间对齐,窗口长度固定,没有重叠。
    滑动窗口:sliding window:滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成。窗口长度固定,可以有重叠。
    会话窗口:session window:由一系列事件组合一个指定时间长度的timeout间隙组成,也就是一段时间没有接到新数据就会生成新的窗口。特点:时间无对齐。
    
  • window API:
    窗口分配器:window()方法
    我们可以用.window()来定义一个窗口,然后基于这个window去做一些聚合操作或者其它处理操作。注意window()方法必须在keyby方法之后才能用。
    flink提供了更加简单的.timeWindow()和.countWindow(),用于定义时间窗口和计数窗口。
    DataStream<Tuple2<String,Double>> minTempPerWindowStream = dataStream
                                                                         .map(new MyMapper())
                                                                         .keyby(data -> data.f0)
                                                                         .timeWindow( Time.seconds(15) )
                                                                         .minBy(1);
    
  • 窗口函数(window function):
    window function定义了窗口中要对收集的数据所做的计算操作。
    可以分为两类:增量聚合函数,increment aggregation functions,每条数据到来就进行计算,保持一个简单的状态。
                              如reduceFunction,aggregateFunction
                全窗口函数,full windowFunctions,先把窗口所有数据收集起来,等到计算的时候会遍历所有数据。
                              如processWindowFunction,WindowFunction
            
    
  • 其他可选API:
    .trigger()--触发器,定义窗口什么时候关闭,触发计算并输出结果。
    .evictor()--移除器,定义移除某些数据的逻辑。
    .allowedLateness(),允许处理迟到的数据。
    .sideOutputLateData(),将迟到的数据放入侧输出流。
    .getSideOutput(),获取侧输出流。
    

posted on   张少凯  阅读(114)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示