【发布时间】:2020-09-07 09:16:51
【问题描述】:
上下文:我正在处理的项目处理定期(1 分钟)生成的带时间戳的文件,它们被实时摄取到一系列级联窗口操作符中。文件的时间戳表示事件时间,所以我不需要依赖文件创建时间。每个窗口的处理结果被发送到一个接收器,该接收器将数据存储在几个表中。
input -> 1 min -> 5 min -> 15 min -> ...
\-> SQL \-> SQL \-> SQL
我正在尝试提出一种解决方案来处理实时流程可能出现的停机时间。输入文件是独立生成的,所以在 Flink 解决方案严重宕机的情况下,我想摄取和处理丢失的文件,就像它们被同一个进程摄取一样。
我的第一个想法是配置一个相同流程的操作模式,它只读取丢失的文件,并且允许延迟覆盖要处理的最早文件。但是,一旦处理了一个文件,就可以保证不会再摄取更多迟到的文件,因此我不一定需要在整个过程中保持最早的窗口打开,尤其是因为可能有很多文件要以这种方式处理。是否有可能关闭窗口,即使设置了允许的延迟时间,或者我应该考虑将整个事情作为批处理操作并按时间戳进行分区?
【问题讨论】:
-
两个问题:您是否使用事件时间处理,带有水印?您是否按顺序摄取输入文件?
-
对两者都是:我正在使用事件时间,每次摄取文件时都会生成水印,并且在当前模式中可以假设文件是按顺序摄取的,因为它们是按顺序生成和检测的,但是如果我需要实现批量读取,我会按顺序摄取它们,是的。
标签: apache-flink real-time flink-streaming