说明
以下Window 窗口的4个相关重要组件:
- assigner(分配器):如何将元素分配给窗口
- function:窗口函数,如:
max() - triger(触发器):在什么条件下触发窗口的计算
- evictor(退出器):定义从窗口中移除数据
KeyBy 窗口
先根据 key 分组后,然后对窗口数据进行聚合
dataStream
.keyBy("id")
//.timeWindow() // 废弃
// window:用于分组的流,拥有同一个key值的数据将进入同一个窗口,可以设置并行度
.window(WindowAssigner子类对象)
// 触发器:定义窗口什么时候关闭,触发计算并输出结果
[.trigger()] // 需要实现自定义的Trigger
// 移除器:定义移除某些数据的逻辑
[.evictor()] // 需要实现自定义的Evictor
// 输出结果后先不关闭窗口,延迟等待设定的时间,如果有迟到的数据就不断更新输出结果
[.allowedLateness(Time.minutes(1))]
// 将迟到的数据放入侧输出流
[.sideOutputLateData(outputTag)]
// 窗口函数:sum,min,max,minBy,maxBy...
.sum("temperature")
[.getSideOutput(...)]
WindowAssigner 子类
- SlidingEventTimeWindows:滑动事件时间窗口
- SlidingProcessingTimeWindows:滑动处理时间窗口
- TumblingEventTimeWindows:滚动事件时间窗口
- TumblingProcessingTimeWindows:滚动处理时间窗口
非 KeyBy 窗口
没使用 keyBy() 分组后的的流,是把 所有的数据 进行聚合,并行度只能为 1
dataStream
//.timeWindowAll() // 废弃
// windowAll:用于非分组的流,每进入一条数据就增加一个窗口,每个窗口处理一条数据,并行度始终为1
.windowAll(WindowAssigner子类对象)
.countWindowAll()
// 触发器:定义窗口什么时候关闭,触发计算并输出结果
[.trigger()] // 需要实现自定义的Trigger
// 移除器:定义移除某些数据的逻辑
[.evictor()] // 需要实现自定义的Evictor
// 输出结果后先不关闭窗口,延迟等待设定的时间,如果有迟到的数据就不断更新输出结果
[.allowedLateness(Time.minutes(1))]
// 将迟到的数据放入侧输出流
[.sideOutputLateData(outputTag)]
// 窗口函数:sum,min,max,minBy,maxBy...
.sum("")
[.getSideOutput(...)]
https://blog.csdn.net/weixin_45034316/article/details/115673608