Aplikasi dimulai ulang - 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.

Aplikasi dimulai ulang

Jika aplikasi Anda tidak sehat, tugas Apache Flink terus gagal dan dimulai ulang. Bagian ini menjelaskan gejala dan langkah pemecahan masalah untuk kondisi ini.

Gejala

Kondisi ini dapat memiliki gejala berikut:

  • Metrik FullRestarts tidak nol. Metrik ini menunjukkan berapa kali tugas aplikasi dimulai ulang sejak Anda memulai aplikasi.

  • Metrik Downtime tidak nol. Metrik ini menunjukkan jumlah milidetik ketika aplikasi berada di status FAILING atau RESTARTING.

  • Log aplikasi berisi perubahan status ke RESTARTING atau FAILED. Anda dapat menanyakan log aplikasi untuk perubahan status ini menggunakan kueri Wawasan CloudWatch Log berikut:Menganalisis kesalahan: Kegagalan terkait tugas aplikasi.

Penyebab dan solusi

Kondisi berikut dapat menyebabkan aplikasi Anda menjadi tidak stabil dan dimulai ulang berulang kali:

  • Operator melempar pengecualian: Jika ada pengecualian dalam operator dalam aplikasi Anda tidak tertangani, aplikasi gagal selesai (dengan menafsirkan bahwa kegagalan tidak dapat ditangani oleh operator). Aplikasi dimulai ulang dari titik pemeriksaan terbaru untuk mempertahankan semantik pemrosesan "exactly-once". Akibatnya, Downtime tidak nol selama periode mulai ulang ini. Agar hal ini tidak terjadi, sebaiknya tangani pengecualian yang dapat dicoba lagi dalam kode aplikasi.

    Anda dapat menyelidiki penyebab kondisi ini dengan mengkueri log aplikasi Anda untuk perubahan dari status aplikasi Anda dari RUNNING ke FAILED. Untuk informasi selengkapnya, lihat Menganalisis kesalahan: Kegagalan terkait tugas aplikasi.

  • Aliran data Kinesis tidak disediakan dengan benar: Jika sumber atau sink untuk aplikasi Anda adalah aliran data Kinesis, periksa metrik untuk aliran atau kesalahan. ReadProvisionedThroughputExceeded WriteProvisionedThroughputExceeded

    Jika Anda melihat kesalahan ini, Anda dapat meningkatkan throughput yang tersedia untuk aliran Kinesis dengan meningkatkan jumlah serpihan aliran. Untuk informasi selengkapnya, lihat Bagaimana cara mengubah jumlah serpihan terbuka di Kinesis Data Streams?.

  • Sumber atau sink lainnya tidak diberikan atau tersedia dengan benar: Pastikan aplikasi Anda menyediakan sumber dan sink dengan benar. Periksa apakah sumber atau sink apa pun yang digunakan dalam aplikasi (seperti AWS layanan lain, atau sumber atau tujuan eksternal) disediakan dengan baik, tidak mengalami pelambatan baca atau tulis, atau secara berkala tidak tersedia.

    Jika Anda mengalami masalah terkait throughput pada layanan dependen Anda, baik meningkatkan sumber daya yang tersedia untuk layanan tersebut, maupun menyelidiki penyebab kesalahan atau ketidaktersediaan apa pun.

  • Operator tidak disediakan dengan benar: Jika beban kerja pada utas untuk salah satu operator dalam aplikasi Anda tidak didistribusikan dengan benar, operator dapat kelebihan beban dan aplikasi dapat crash. Untuk informasi tentang penyetelan paralelisme operator, lihat Kelola penskalaan operator dengan benar.

  • Aplikasi gagal dengan DaemonException: Kesalahan ini muncul di log aplikasi Anda jika Anda menggunakan versi Apache Flink sebelum 1.11. Anda mungkin perlu meng-upgrade ke versi Apache Flink yang lebih baru sehingga versi KPL 0,14 atau yang lebih baru digunakan.

  • Aplikasi gagal dengan TimeoutException, FlinkException, atau RemoteTransportException: Kesalahan ini mungkin muncul di log aplikasi Anda jika pengelola tugas Anda mogok. Jika aplikasi Anda kelebihan beban, manajer tugas Anda dapat mengalami tekanan sumber daya CPU atau memori, menyebabkannya gagal.

    Kesalahan ini mungkin terlihat seperti berikut:

    • java.util.concurrent.TimeoutException: The heartbeat of JobManager with id xxx timed out

    • org.apache.flink.util.FlinkException: The assigned slot xxx was removed

    • org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException: Connection unexpectedly closed by remote task manager

    Untuk memecahkan masalah kondisi ini, periksa hal berikut:

    • Periksa CloudWatch metrik Anda untuk lonjakan yang tidak biasa dalam penggunaan CPU atau memori.

    • Periksa aplikasi Anda untuk masalah throughput. Untuk informasi selengkapnya, lihat Memecahkan masalah kinerja.

    • Periksa log aplikasi Anda untuk pengecualian yang tidak tertangani yang ditimbulkan oleh kode aplikasi Anda.

  • Aplikasi gagal dengan kesalahan JaxbAnnotationModule Tidak Ditemukan: Kesalahan ini terjadi jika aplikasi Anda menggunakan Apache Beam, tetapi tidak memiliki dependensi atau versi dependensi yang benar. Managed Service untuk aplikasi Apache Flink yang menggunakan Apache Beam harus menggunakan versi dependensi berikut:

    <jackson.version>2.10.2</jackson.version> ... <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>2.10.2</version> </dependency>

    Jika Anda tidak menyediakan versi jackson-module-jaxb-annotations yang benar sebagai dependensi eksplisit, aplikasi Anda memuatnya dari dependensi lingkungan, dan karena versi tidak cocok, aplikasi mengalami crash saat runtime.

    Untuk informasi selengkapnya tentang penggunaan Apache Beam dengan Managed Service for Apache Flink, lihat. Menggunakan CloudFormation dengan Managed Service untuk Apache Flink

  • Aplikasi gagal dengan java.io.IOException: Jumlah buffer jaringan tidak mencukupi

    Ini terjadi ketika aplikasi tidak memiliki cukup memori yang dialokasikan untuk buffer jaringan. Buffer jaringan memfasilitasi komunikasi antar subtugas. Mereka digunakan untuk menyimpan catatan sebelum transmisi melalui jaringan, dan untuk menyimpan data yang masuk sebelum membedahnya menjadi catatan dan menyerahkannya ke subtugas. Jumlah buffer jaringan diperlukan skala langsung dengan paralelisme dan kompleksitas grafik pekerjaan Anda. Ada sejumlah pendekatan untuk mengurangi masalah ini:

    • Anda dapat mengkonfigurasi yang lebih rendah parallelismPerKpu sehingga ada lebih banyak memori yang dialokasikan per subtask dan buffer jaringan. Perhatikan bahwa penurunan parallelismPerKpu akan meningkatkan KPU dan karenanya biaya. Untuk menghindari hal ini, Anda dapat menjaga jumlah KPU yang sama dengan menurunkan paralelisme dengan faktor yang sama.

    • Anda dapat menyederhanakan grafik pekerjaan Anda dengan mengurangi jumlah operator atau merantainya sehingga lebih sedikit buffer yang dibutuhkan.

    • Jika tidak, Anda dapat menghubungi https://aws.amazon.com/premiumsupport/ untuk konfigurasi buffer jaringan khusus.