S3 StreamingFileSink FileNotFoundExceptions - Layanan Terkelola untuk Apache Flink

Amazon Managed Service untuk Apache Flink sebelumnya dikenal sebagai Amazon Kinesis Data Analytics untuk Apache Flink.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

S3 StreamingFileSink FileNotFoundExceptions

Layanan Terkelola untuk aplikasi Apache Flink dapat berjalan ke file bagian dalam proses FileNotFoundException saat memulai dari snapshot jika file bagian dalam proses yang dirujuk oleh savepoint-nya tidak ada. Ketika mode kegagalan ini terjadi, status operator aplikasi Managed Service for Apache Flink biasanya tidak dapat dipulihkan dan harus dimulai ulang tanpa menggunakan snapshot. SKIP_RESTORE_FROM_SNAPSHOT Lihat contoh stacktrace berikut:

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 menulis catatan ke sistem file yang didukung oleh Sistem File. Mengingat bahwa aliran yang masuk dapat tidak dibatasi, data diatur ke dalam file bagian dengan ukuran terbatas dengan file baru ditambahkan saat data ditulis. Kebijakan siklus hidup dan rollover bagian menentukan waktu, ukuran, dan penamaan file bagian.

Selama checkpointing dan savepointing (snapshotting), semua file yang Tertunda diganti namanya dan dikomit. Namun, file bagian dalam proses tidak dikomit tetapi diganti namanya dan referensi mereka disimpan dalam pos pemeriksaan atau metadata savepoint untuk digunakan saat memulihkan pekerjaan. File bagian dalam proses ini pada akhirnya akan bergulir ke Pending, diganti namanya, dan dilakukan oleh pos pemeriksaan atau savepoint berikutnya.

Berikut ini adalah akar penyebab dan mitigasi untuk file bagian dalam proses yang hilang:

  • Snapshot basi digunakan untuk memulai Layanan Terkelola untuk aplikasi Apache Flink - hanya snapshot sistem terbaru yang diambil saat aplikasi dihentikan atau diperbarui yang dapat digunakan untuk memulai Layanan Terkelola untuk aplikasi Apache Flink dengan Amazon S3. StreamingFileSink Untuk menghindari kelas kegagalan ini, gunakan snapshot sistem terbaru.

    • Ini terjadi misalnya ketika Anda memilih snapshot yang dibuat menggunakan CreateSnapshot alih-alih Snapshot yang dipicu sistem selama berhenti atau memperbarui. Savepoint snapshot yang lebih lama menyimpan out-of-date referensi ke file bagian dalam proses yang telah diganti namanya dan dilakukan oleh pos pemeriksaan atau savepoint berikutnya.

    • Ini juga dapat terjadi ketika snapshot yang dipicu sistem dari acara Stop/Update non-terbaru dipilih. Contohnya adalah aplikasi dengan snapshot sistem dinonaktifkan tetapi telah RESTORE_FROM_LATEST_SNAPSHOT dikonfigurasi. Umumnya, Layanan Terkelola untuk aplikasi Apache Flink dengan Amazon StreamingFileSink S3 harus selalu mengaktifkan dan mengonfigurasi snapshot sistem. RESTORE_FROM_LATEST_SNAPSHOT

  • File bagian dalam proses dihapus — Karena file bagian yang sedang berlangsung terletak di bucket S3, file tersebut dapat dihapus oleh komponen atau aktor lain yang memiliki akses ke bucket.

    • Hal ini dapat terjadi jika Anda telah menghentikan aplikasi terlalu lama dan file bagian dalam proses yang dirujuk oleh savepoint aplikasi Anda telah dihapus oleh kebijakan siklus hidup bucket S3. MultiPartUpload Untuk menghindari kelas kegagalan ini, pastikan bahwa kebijakan MPU siklus hidup Bucket S3 Anda mencakup periode yang cukup besar untuk kasus penggunaan Anda.

    • Ini juga dapat terjadi ketika file bagian dalam proses telah dihapus secara manual atau oleh salah satu komponen sistem Anda yang lain. Untuk menghindari kelas kegagalan ini, pastikan bahwa file bagian dalam proses tidak dihapus oleh aktor atau komponen lain.

  • Kondisi balapan di mana pos pemeriksaan otomatis dipicu setelah savepoint - Ini memengaruhi Layanan Terkelola untuk versi Apache Flink hingga dan termasuk 1.13. Masalah ini diperbaiki di Managed Service untuk Apache Flink versi 1.15. Migrasikan aplikasi Anda ke versi terbaru Layanan Terkelola untuk Apache Flink untuk mencegah kekambuhan. Kami juga menyarankan untuk bermigrasi dari StreamingFileSink ke FileSink.

    • Ketika aplikasi dihentikan atau diperbarui, Managed Service for Apache Flink memicu savepoint dan menghentikan aplikasi dalam dua langkah. Jika pos pemeriksaan otomatis terpicu di antara dua langkah, savepoint tidak akan dapat digunakan karena file bagian yang sedang berlangsung akan diganti namanya dan berpotensi dikomit.