事件时间
到达时间
处理时间
水位线
1.有序流
2. 无序流
水位线离源越近越好
Flink 自带水位线
有序
WatermarkStrategy.<Event>forMonotonousTimestamps()
或者实现WatermarkStrategy接口
水位线生成+ 时间字段
乱序
WatermarkStrategy.<Event>forBoundedOutOfOrderness
水位线传递 接收分布式的最小的
窗口类型
为什么要用window
在flink中数据时源源不断的 ,但是某些聚合分析 我们需要的是对一定范围内的 可能是1000个数量或者1小时之内的数据分析 所以用了窗口
1.按驱动类型
2.窗口分配数据
滚动窗口(特殊的滑动窗口) 固定长
滑动窗口 滑动步长
会话窗口 窗口长度不确定
全局窗口
窗口API
1.是否按键分区-keyby
(1) 按键分区窗口
stream.keyby().window()
(2) 非按键
stream.windowAll()
开窗
窗口function
1.增量聚合
(1)ReduceFunction
(2)AggregateFunction
注意滑动窗口的关闭时间
2.全窗口
windowfunction 和processWindowFunction
窗口延迟 和水位线延迟
.allowedLateness()
水位线延迟 控制的是窗口关闭
窗口延迟 控制的是数据的读取 多一个延迟窗口
窗口是左闭合 右开放
举个例子 水位线延迟2秒 窗口延迟1分钟
那么 当数据处于0-10秒时 窗口自动处理 当处于70秒时 此时实际的水位线68 虽然窗口是关闭了 但是 实际上延迟窗口还在 还是能处理 进行读取数据
当数据进行到72时 水位线为70 此时延迟窗口也不行了 ,数据归为延迟数据