在一个flink任务中需要近1小时和近6小时的特征,这种在生产上一般用事件时间还是处理时间?如果用事件事件窗口可能不关闭怎么办?
以下为热心网友提供的参考意见
楼主你好,在一个阿里云Flink任务中,使用事件时间还是处理时间窗口取决于你的需求和数据流的特点。如果你决定使用事件时间窗口,并且担心窗口不会关闭的问题,可以考虑使用allowedLateness
和side output
来处理。
allowedLateness
:可以为事件时间窗口设置一个允许的延迟时间,在延迟时间内到达的迟到的数据仍然会被处理。你可以使用allowedLateness
方法来设置允许的延迟时间。比如设置一个6小时的允许延迟时间:
WindowedStream windowedStream = ...
windowedStream
.allowedLateness(Time.hours(6))
.apply(...)
side output
:当窗口关闭时,如果还有迟到的数据到达,你可以将这些数据发送到一个侧输出流进行处理。可以使用getSideOutput
方法获取侧输出流数据。比如将迟到的数据发送到一个侧输出流:
OutputTag lateDataTag = new OutputTag("late-data") {};
WindowedStream windowedStream = ...
windowedStream
.sideOutputLateData(lateDataTag)
.apply(...)
然后,你可以使用getSideOutput
方法获取侧输出流的数据。