Flink窗口的类型


一、简介

Flink在处理无界数据流时,也可以切分数据流来得到有限的数据集进行处理,即有界流。而windows,就是它的切分方式,它会把数据流分发到有限大小的bucket(桶)种进行分析。其中,可以分为两种window类型,即时间窗口计数窗口

window类型 细分类型 备注
时间窗口 滚动时间窗口 最简单的窗口类型,按照时间切分成一个一个的窗口
滑动时间窗口 它会进行滑动,每次滑动的步长可以设定,窗口之间可以有重叠
会话窗口 前后会话相隔一定的时间,则划分一个窗口
计数窗口 滚动计数窗口 达到一定数量就划分一个窗口
滑动计数窗口 滑动进行统计,比如每隔一分钟统计过去24小时购买数据

二、代码

package com

import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.assigners.{
    
    EventTimeSessionWindows, ProcessingTimeSessionWindows, SlidingProcessingTimeWindows, TumblingEventTimeWindows, TumblingProcessingTimeWindows}
import org.apache.flink.streaming.api.windowing.time.Time

object TumblingWindow {
    
    
    def main(args: Array[String]): Unit = {
    
    
        val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

        // receive a text-stream
        val ds: DataStream[String] = env.socketTextStream("127.0.0.1", 9999)

        val result: DataStream[(String, Int)] = ds.flatMap(_.split(" "))
            .filter(_.nonEmpty)
            .map((_, 1))
            .keyBy(0)
            // 滚动事件窗口(按照process-time),如果使用event-time,即TumblingEventTimeWindows,则需要指定事件时间和watermark
            //            .window(TumblingProcessingTimeWindows.of(Time.seconds(5)))
            // 滑动时间窗口,窗口长度为5s,每次滑动长度为3s
            //            .window(SlidingProcessingTimeWindows.of(Time.seconds(5), Time.seconds(3)))
            // 会话窗口,两次处理时间相隔5秒以上,则不认为这是同一个窗口了
            //            .window(ProcessingTimeSessionWindows.withGap(Time.seconds(5)))
            // 简写:滚动窗口
            //            .timeWindow(Time.seconds(5))
            // 简写:滑动窗口
            //            .timeWindow(Time.seconds(5), Time.seconds(3))
            // 计数窗口:滚动
            //            .countWindow(10)
            // 计数窗口:滑动
            .countWindow(10, 5)
            .sum(1)

        result.print()

        env.execute("window demo")
    }
}

使用netcat工具,windows平台使用nc -lp 9999,linux使用nc -lk 9999 进行测试。


三、备注

flink还提供了很多窗口调用,根据需要进行使用,可以在源码种查看。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40579464/article/details/124347635