在一个flink任务中需要近1小时和近6小时的特征,这种在生产上一般用事件时间还是处理时间?如果用事件的话,事件窗口可能不关闭怎么办?
楼主你好,在一个阿里云Flink任务中,使用事件时间还是处理时间窗口取决于你的需求和数据流的特点。如果你决定使用事件时间窗口,并且担心窗口不会关闭的问题,可以考虑使用allowedLateness
和side output
来处理。
allowedLateness
:可以为事件时间窗口设置一个允许的延迟时间,在延迟时间内到达的迟到的数据仍然会被处理。你可以使用allowedLateness
方法来设置允许的延迟时间。比如设置一个6小时的允许延迟时间:WindowedStream<T, K, W> windowedStream = ...
windowedStream
.allowedLateness(Time.hours(6))
.apply(...)
side output
:当窗口关闭时,如果还有迟到的数据到达,你可以将这些数据发送到一个侧输出流进行处理。可以使用getSideOutput
方法获取侧输出流数据。比如将迟到的数据发送到一个侧输出流:OutputTag<T> lateDataTag = new OutputTag<T>("late-data") {};
WindowedStream<T, K, W> windowedStream = ...
windowedStream
.sideOutputLateData(lateDataTag)
.apply(...)
然后,你可以使用getSideOutput
方法获取侧输出流的数据。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。