文章目录
Time 与 Window
1. Time
2. Window
-
Window 概述
streaming 流式计算是一种被设计用于处理无限数据集的数据处理引擎,而无限数据集 是指一种不断增长的本质上无限的数据集,而 window 是一种切割无限数据为有限块进行处 理的手段。Window 是无限数据流处理的核心,Window 将一个无限的 stream 拆分成有限大 小的”buckets”桶,我们可以在这些桶上做计算操作。 -
Window 类型
3. Window API
3.1CountWindow
参考代码
package com.czxy.flink.stream.window
import org.apache.flink.streaming.api.scala.{
DataStream, KeyedStream, StreamExecutionEnvironment, WindowedStream}
import org.apache.flink.streaming.api.windowing.windows.GlobalWindow
/**
* 思路步骤:
* 1.获取执行环境
* 2.创建 SocketSource
* 3.对 stream 进行处理并按 key 聚合
* 4.countWindow 操作
* 5.执行聚合操作
* 6.将聚合数据输出
* 7.执行程序
*
* 集群输入 nc -lk 9999
*/
object StreamCountWindow {
def main(args: Array[String]): Unit = {
//1.创建执行环境
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
//2.构建数据源,创建 SocketSource
val socketSource: DataStream[String] = env.socketTextStream("node01",9999)
//3.对 stream 进行处理并按 key 聚合
import org.apache.flink.api.scala._
val groupKeyedStream: KeyedStream[(String, Int), String] = socketSource.flatMap(x=>x.split(" ")).map((_,1)).keyBy(_._1)
//4.引入countWindow 操作,每5条数据计算一次
val countWindowStream: WindowedStream[(String, Int), String, GlobalWindow] = groupKeyedStream.countWindow(5)
//5.执行聚合操作
val resultDataStream: DataStream[(String, Int)] = countWindowStream.sum(1)
//6.将聚合数据输出
resultDataStream.print()
//7.执行程序
env.execute("StreamCountWindow")
}
}
3.2 TimeWindow
参考代码
package com.czxy.flink.stream.window
import org.apache.flink.streaming.api.scala.{
DataStream, KeyedStream, StreamExecutionEnvironment, WindowedStream}
import org.apache.flink.streaming.api.windowing.time.Time
import org.apache.flink.streaming.api.windowing.windows.TimeWindow
/**
* 思路步骤:
* 1.获取执行环境
* 2.创建你 socket 链接获取数据
* 3.进行数据转换处理并按 key 聚合
* 4.引入 timeWindow
* 5.执行聚合操作
* 6.输出打印数据
* 7.执行程序
*/
object StreamTimeWindow {
def main(args