Amazon s3 Flink流文件接收器无法从故障中恢复

Amazon s3 Flink流文件接收器无法从故障中恢复,amazon-s3,apache-flink,Amazon S3,Apache Flink,我们有一个flink流媒体作业,它从kafka读取数据并将其放入S3。我们使用flink的内部流文件接收器API来实现这一点。但是,几天后,作业失败,无法从失败中恢复。消息说它无法从s3中找到tmp文件。我们想知道可能的根本原因是什么,因为我们真的不想丢失任何数据 谢谢 整个输出如下所示 java.io.FileNotFoundException: No such file or directory: s3://bucket_name/_part-0-282_tmp_b9777494-d73b-

我们有一个flink流媒体作业,它从kafka读取数据并将其放入S3。我们使用flink的内部流文件接收器API来实现这一点。但是,几天后,作业失败,无法从失败中恢复。消息说它无法从s3中找到tmp文件。我们想知道可能的根本原因是什么,因为我们真的不想丢失任何数据

谢谢

整个输出如下所示

java.io.FileNotFoundException: No such file or directory: s3://bucket_name/_part-0-282_tmp_b9777494-d73b-4141-a4cf-b8912019160e
    at org.apache.flink.fs.shaded.hadoop3.org.apache.hadoop.fs.s3a.S3AFileSystem.s3GetFileStatus(S3AFileSystem.java:2255)
    at org.apache.flink.fs.shaded.hadoop3.org.apache.hadoop.fs.s3a.S3AFileSystem.innerGetFileStatus(S3AFileSystem.java:2149)
    at org.apache.flink.fs.shaded.hadoop3.org.apache.hadoop.fs.s3a.S3AFileSystem.getFileStatus(S3AFileSystem.java:2088)
    at org.apache.flink.fs.shaded.hadoop3.org.apache.hadoop.fs.s3a.S3AFileSystem.open(S3AFileSystem.java:699)
    at org.apache.flink.fs.shaded.hadoop3.org.apache.hadoop.fs.FileSystem.open(FileSystem.java:950)
    at org.apache.flink.fs.s3hadoop.HadoopS3AccessHelper.getObject(HadoopS3AccessHelper.java:99)
    at org.apache.flink.fs.s3.common.writer.S3RecoverableMultipartUploadFactory.recoverInProgressPart(S3RecoverableMultipartUploadFactory.java:97)
    at org.apache.flink.fs.s3.common.writer.S3RecoverableMultipartUploadFactory.recoverRecoverableUpload(S3RecoverableMultipartUploadFactory.java:75)
    at org.apache.flink.fs.s3.common.writer.S3RecoverableWriter.recover(S3RecoverableWriter.java:95)
    at org.apache.flink.fs.s3.common.writer.S3RecoverableWriter.recover(S3RecoverableWriter.java:50)
    at org.apache.flink.streaming.api.functions.sink.filesystem.Bucket.restoreInProgressFile(Bucket.java:140)
    at org.apache.flink.streaming.api.functions.sink.filesystem.Bucket.<init>(Bucket.java:127)
    at org.apache.flink.streaming.api.functions.sink.filesystem.Bucket.restore(Bucket.java:396)
    at org.apache.flink.streaming.api.functions.sink.filesystem.DefaultBucketFactoryImpl.restoreBucket(DefaultBucketFactoryImpl.java:64)
    at org.apache.flink.streaming.api.functions.sink.filesystem.Buckets.handleRestoredBucketState(Buckets.java:177)
    at org.apache.flink.streaming.api.functions.sink.filesystem.Buckets.initializeActiveBuckets(Buckets.java:165)
    at org.apache.flink.streaming.api.functions.sink.filesystem.Buckets.initializeState(Buckets.java:149)
    at org.apache.flink.streaming.api.functions.sink.filesystem.StreamingFileSink.initializeState(StreamingFileSink.java:334)
    at org.apache.flink.streaming.util.functions.StreamingFunctionUtils.tryRestoreFunction(StreamingFunctionUtils.java:178)
    at org.apache.flink.streaming.util.functions.StreamingFunctionUtils.restoreFunctionState(StreamingFunctionUtils.java:160)
    at org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator.initializeState(AbstractUdfStreamOperator.java:96)
    at org.apache.flink.streaming.api.operators.AbstractStreamOperator.initializeState(AbstractStreamOperator.java:278)
    at org.apache.flink.streaming.runtime.tasks.StreamTask.initializeState(StreamTask.java:738)
    at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:289)
    at org.apache.flink.runtime.taskmanager.Task.run(Task.java:704)
    at java.lang.Thread.run(Thread.java:748)

谢谢你的报道

您能指定您使用的是哪种Flink版本吗?我问的原因是因为你的问题可能与这张票有关

此外,StreamingFileLink使用S3的特性。这意味着文件将以小部分的形式逐渐上传到S3,当提交它们时,所有部分在概念上都连接到一个对象中。S3允许您指定挂起的超时,即未提交的多部分上载您的bucker的MPU,当超时时,挂起的MPU被中止,数据被删除。因此,如果您积极地设置了此参数,则可能会遇到此问题

最后,从您之前的帖子中,我猜您是在尝试从失败中重新启动,而不是从保存点重新启动。这是正确的吗?如果您试图从旧的保存点重新启动,那么可能存在这样的问题:接收器已经提交了该MPU,而现在接收器找不到它


我希望这能有所帮助。

Hello@Hu Guang,你能粘贴整个错误消息和用于定义接收器的代码片段吗?@TobiSH我已经粘贴了上面的整个消息。谢谢,我们正在使用flink-1.7.1。我非常确定S3的超时设置没有问题,因为我们将其设置为7天。我将更新flink版本,以验证flink-13940.Hi,Kostas是否存在相同的问题。我们尝试使用1.8.2版升级flink作业jar,但没有升级集群版本。但这种错误有时仍然存在。你能告诉我们如何解决这个问题吗?谢谢你迟来的答复。你检查过你的桶里是否有文件part-0-282吗?这意味着该文件已经提交。