Amazon Managed Service for Apache Flink(Amazon MSF)之前称为 Amazon Kinesis Data Analytics for Apache Flink。
S3 StreamingFileSink FileNotFoundExceptions
如果缺少由其保存点引用的正在处理的部件文件,则从快照启动FileNotFoundException时,Managed Service for Apache Flink 应用程序可能会遇到正在进行的部分文件。出现这种故障模式时,Managed Service for Apache Flink 应用程序的操作员状态通常是不可恢复的,必须在不使用快照的情况下重新启动。SKIP_RESTORE_FROM_SNAPSHOT参见以下示例堆栈跟踪:
java.io.FileNotFoundException: No such file or directory: s3://amzn-s3-demo-bucket/pathj/INSERT/2023/4/19/7/_part-2-1234_tmp_12345678-1234-1234-1234-123456789012 at org.apache.hadoop.fs.s3a.S3AFileSystem.s3GetFileStatus(S3AFileSystem.java:2231) at org.apache.hadoop.fs.s3a.S3AFileSystem.innerGetFileStatus(S3AFileSystem.java:2149) at org.apache.hadoop.fs.s3a.S3AFileSystem.getFileStatus(S3AFileSystem.java:2088) at org.apache.hadoop.fs.s3a.S3AFileSystem.open(S3AFileSystem.java:699) at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:950) at org.apache.flink.fs.s3hadoop.HadoopS3AccessHelper.getObject(HadoopS3AccessHelper.java:98) at org.apache.flink.fs.s3.common.writer.S3RecoverableMultipartUploadFactory.recoverInProgressPart(S3RecoverableMultipartUploadFactory.java:97) ...
Flink StreamingFileSink 将记录写入文件系统
在检查点和保存指向(快照)期间,所有待处理文件都将被重命名并提交。但是,正在处理的部分文件不会提交,而是会重命名,其引用保留在检查点或保存点元数据中,以便在恢复任务时使用。这些正在处理的零件文件最终将变为 “待处理”,由随后的检查点或保存点重命名并提交。
以下是缺少正在处理的零件文件的根本原因和缓解措施:
用于启动适用于 Managed Service for Apache Flink 应用程序的陈旧快照 — 只有在应用程序停止或更新时拍摄的最新系统快照才能用于通过 Amazon S3 StreamingFileSink 启动适用于 Amazon S3 StreamingFileSink 的 Managed Service for Apache Flink应用程序。为避免此类故障,请使用最新的系统快照。
例如,当您在停止或更新期间选择使用创建的快照
CreateSnapshot而不是系统触发的快照时,就会发生这种情况。旧快照的保存点保留了对正在进行的部件文件的过时引用,该文件已被后续检查点或保存点重命名并提交。当系统从非最新的 “停止/更新” 事件中触发的快照被选中时,也会发生这种情况。例如,已禁用系统快照但已
RESTORE_FROM_LATEST_SNAPSHOT配置的应用程序。通常,带有 Amazon S3 StreamingFileSink 的 Managed Service for Apache Flink 应用程序应始终启用和配置系统快照。RESTORE_FROM_LATEST_SNAPSHOT
已移除正在处理的部分文件 — 由于正在处理的部分文件位于 S3 存储桶中,因此其他有权访问该存储桶的组件或参与者可以将其删除。
当你停止应用程序的时间太长且 S3 存储桶 Mul tipartuPload 生命周期策略删除了应用程序保存点所引用的进行中部分文件时,就会发生这种情况。为避免此类故障,请确保您的 S3 Bucket MPU 生命周期策略涵盖的期限足够长,足以满足您的用例。
当正在处理的零件文件被手动删除或被系统的另一个组件删除时,也可能发生这种情况。为避免此类故障,请确保正在处理的零件文件不会被其他参与者或组件删除。
在 savepoint 之后触发自动检查点的争用条件 — 这会影响 Managed Service for Apache Flink 1.13 及以下版本。Managed Service for Apache Flink 1.15 版本中已修复此问题。将您的应用程序迁移到最新版本的 Managed Service for Apache Flink 以防止问题再次发生。我们还建议从 StreamingFileSink 迁移到 FileSink
。 当应用程序停止或更新时,适用于 Managed Service for Apache Flink 会触发保存点并分两步停止应用程序。如果在这两个步骤之间触发了自动检查点,则该保存点将无法使用,因为其正在处理的部分文件将被重命名并可能被提交。