flink1.12.x window窗口api使用说明:WindowAssigner、function、triger、evictor、allowedLateness、sideOutputLateData、getSideOutput

说明

以下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


原文出处:/show_1IX3swfMv1j7.html