S3 StreamingFileSink FileNotFoundExceptions - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink は、以前は Amazon Kinesis Data Analytics for Apache Flink と呼ばれていました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

S3 StreamingFileSink FileNotFoundExceptions

Apache Flink アプリケーション用 Managed Serviceでは、セーブポイントによって参照される進行中のパーツファイルが見つからない場合、スナップショットから開始すると、処理中のパーツファイル FileNotFoundException に遭遇する可能性があります。この障害モードが発生した場合、Apache Flink アプリケーション用 Managed Serviceのオペレータ状態は通常回復不能になり、 SKIP_RESTORE_FROM_SNAPSHOT を使用してスナップショットなしで再起動する必要があります。以下のスタックトレースの例を参照してください。

java.io.FileNotFoundException: No such file or directory: s3://your-s3-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書き込みます。受信ストリームは無制限であるため、データは有限サイズの部分ファイルに編成されて、データが書き込まれると新しいファイルが追加されます。パーツのライフサイクルとロールオーバーポリシーによって、パーツファイルのタイミング、サイズ、名前が決まります。

チェックポイントとセーブポイント (スナップショット) 中に、保留中のすべてのファイルの名前が変更され、コミットされます。ただし、処理中のパーツファイルはコミットされずに名前が変更され、その参照はチェックポイントまたはセーブポイントのメタデータ内に保持され、ジョブの復元時に使用されます。これらの処理中のパーツファイルは、最終的に Pending にロールオーバーされ、名前が変更され、後続のチェックポイントまたはセーブポイントによってコミットされます。

処理中のパーツファイルが見つからない場合の根本原因と緩和策は次のとおりです。

  • Managed Service for Apache Flink アプリケーションの起動に使用される古いスナップショット – アプリケーションが停止または更新されたときに作成された最新のシステムスナップショットのみを使用して、Amazon S3 StreamingFileSink で Managed Service for Apache Flink アプリケーションを起動できます。このような障害を回避するには、最新のシステムスナップショットを使用してください。

    • たとえば、停止中または更新中に、システム・トリガーによるスナップショットではなく、 CreateSnapshot を使用して作成されたスナップショットを選択した場合に発生します。古いスナップショットのセーブポイントは、後続のチェックポイントまたはセーブポイントによって名前が変更され、コミットされた進行中のパートファイルへの out-of-date 参照を保持します。

    • これは、システムがトリガーした最新の Stop/Update イベント以外のスナップショットが選択された場合にも発生する可能性があります。例えば、システム・スナップショットが無効になっているが、 RESTORE_FROM_LATEST_SNAPSHOT が設定されているアプリケーションです。通常、Amazon S3 を使用する Managed Service for Apache Flink StreamingFileSink アプリケーションでは、常にシステムスナップショットを有効にしてRESTORE_FROM_LATEST_SNAPSHOT設定する必要があります。

  • 進行中の部分ファイルの削除 — 処理中の部分ファイルは S3 バケットにあるため、バケットにアクセスできる他のコンポーネントやアクターによって削除される可能性があります。

    • これは、アプリケーションが長時間停止しすぎ、アプリケーションのセーブポイントで参照される進行中のパートファイルが S3 バケット MultiPartUploadライフサイクルポリシーによって削除された場合に発生する可能性があります。このような障害を回避するには、S3 Bucket MPU ライフサイクルポリシーがユースケースに十分に対応した期間を対象としていることを確認してください。

    • これは、処理中のパーツファイルが手動で削除された場合や、システムの別のコンポーネントによって削除された場合にも発生する可能性があります。このような不具合を回避するには、処理中のパーツファイルが他のアクターやコンポーネントによって削除されないようにしてください。

  • セーブポイントの後に自動チェックポイントがトリガーされる競合状態 — これは 1.13 以前の Apache Flink 用 Managed Service バージョンに影響します。この問題は、Managed Service for Apache Flink バージョン 1.15 で修正されています。Managed Service for Apache Flink の最新バージョンにアプリケーションを移行して、繰り返しを防ぎます。また、 から への移行もお勧め StreamingFileSink しますFileSink

    • アプリケーションが停止または更新されると、Apache Flink 用 Managed Service はセーブポイントをトリガーし、2 つのステップでアプリケーションを停止します。2 つのステップの間に自動チェックポイントがトリガーされると、処理中のパーツファイルの名前が変更され、コミットされる可能性があるため、セーブポイントは使用できなくなります。