目录
Flink 窗口
1、Time Window
时间窗口
2、Session Window
会话窗口
如果一段时间没有数据生成一个窗口
3、Count Window
统计窗口
窗口的使用需要先分组,因为需要针对某一个key去划分窗口
Time Window
窗口的使用需要先 keyBy ,再去划分窗口
package com.shujia.flink.window
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.assigners.{SlidingProcessingTimeWindows, TumblingEventTimeWindows, TumblingProcessingTimeWindows}
import org.apache.flink.streaming.api.windowing.time.Time
object Demo1TimeWindow {
def main(args: Array[String]): Unit = {
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
val linesDS: DataStream[String] = env.socketTextStream("master", 8888)
val kvDS: DataStream[(String, Int)] = linesDS.flatMap(_.split(",")).map((_, 1))
/**
* TumblingProcessingTimeWindows : 滚动(两个窗口没有交叉)的处理时间窗口
* TumblingEventTimeWindows : 滚动的事件时间窗口,需要设置时间字段和水位线
* SlidingProcessingTimeWindows : 滑动的处理时间窗口,滑动窗口需要指定窗口大小和滑动时间
* SlidingEventTimeWindows : 滑动的事件时间窗口,需要设置时间字段和水位线
*/
kvDS
//窗口的使用需要先 keyBy ,再去划分窗口
.keyBy(_._1)
//需要传入一个时间的是滚动窗口,需要传入两个时间的是滑动窗口
//.timeWindow(Time.seconds(5)) //处理时间的滚动窗口 -- 这样写是简写
//完整写法:
.window(SlidingProcessingTimeWindows.of(Time.seconds(15), Time.seconds(5)))
.sum(1)
.print()
env.execute()
}
}
Session Window
package com.shujia.flink.window
import org.apache.flink.streaming.api.TimeCharacteristic
import or