Managed Airflow (Gen 3) | Managed Airflow (Gen 2) | Managed Airflow (Legacy Gen 1)
Halaman ini menyediakan langkah-langkah dan informasi pemecahan masalah untuk masalah umum terkait pemicu Airflow.
Memblokir operasi dalam pemicu
Terkadang, tugas asinkron dapat diblokir di pemicu. Dalam kebanyakan kasus, masalahnya berasal dari resource pemicu yang tidak memadai atau masalah dengan kode operator asinkron kustom.
Log pemicu menampilkan pesan peringatan apa pun yang dapat membantu Anda mengidentifikasi penyebab utama penurunan performa pemicu. Ada dua peringatan penting yang harus diperhatikan.
Thread asinkron diblokir:
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.Peringatan ini menandakan masalah performa karena volume tugas asinkron yang tinggi.
Solusi: Untuk mengatasi masalah ini:
- Sesuaikan parameter pemicu untuk mengalokasikan lebih banyak resource ke pemicu atau meningkatkan jumlah pemicu di lingkungan Anda.
- Kurangi jumlah tugas yang ditangguhkan yang dijalankan secara bersamaan.
Meskipun pemicu menangani tugas yang dapat ditangguhkan, pekerja Airflow bertanggung jawab untuk memulai dan akhirnya menyelesaikan setiap tugas. Jika Anda menyesuaikan jumlah pemicu, pertimbangkan juga untuk menskalakan jumlah instance pekerja Anda.
Tugas tertentu memblokir thread asinkron:
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/example.py:609> result=None> took 0.401 secondPeringatan ini mengarah ke bagian kode operator tertentu yang dijalankan oleh Managed Service untuk Apache Airflow. Pemicu berdasarkan desain bergantung pada library
asynciountuk menjalankan operasi di latar belakang. Implementasi kustom pemicu dapat gagal mematuhi kontrakasynciodengan benar (misalnya, karena penggunaan kata kunciawaitdanasyncyang salah dalam kode Python).Solusi: Periksa kode yang dilaporkan oleh peringatan dan periksa apakah operasi asinkron diimplementasikan dengan benar.
Terlalu banyak pemicu
Jumlah tugas yang ditangguhkan dapat dilihat dalam metrik task_count yang juga ditampilkan di dasbor Monitoring lingkungan Anda. Setiap pemicu membuat beberapa resource seperti koneksi ke resource eksternal, yang menggunakan memori.
Grafik penggunaan memori dan CPU menunjukkan bahwa resource yang tidak memadai menyebabkan memulai ulang karena pemeriksaan aktivitas gagal karena tidak ada sinyal aktivitas:
Solusi: Untuk mengatasi masalah ini:
- Sesuaikan parameter pemicu untuk mengalokasikan lebih banyak resource ke pemicu atau meningkatkan jumlah pemicu di lingkungan Anda.
- Kurangi jumlah tugas yang ditangguhkan yang dijalankan secara bersamaan.
Error pekerja Airflow selama eksekusi callback
Setelah pemicu menyelesaikan eksekusi, kontrol akan kembali ke pekerja Airflow, yang menjalankan metode callback menggunakan slot eksekusi. Fase ini dikontrol oleh Celery Executor sehingga konfigurasi dan batas resource yang sesuai berlaku (seperti parallelism atau worker_concurrency).
Jika metode callback gagal di pekerja Airflow, pekerja gagal, atau pekerja yang menjalankan metode dimulai ulang, tugas akan ditandai sebagai FAILED. Dalam hal ini, operasi percobaan ulang akan menjalankan kembali seluruh tugas, bukan hanya metode callback.
Loop tanpa henti dalam pemicu
Anda dapat menerapkan operator pemicu kustom sedemikian rupa sehingga memblokir seluruh loop pemicu utama, sehingga hanya satu pemicu yang rusak yang dijalankan pada saat itu. Dalam hal ini, peringatan akan dibuat dalam log pemicu setelah pemicu yang bermasalah selesai.
Class pemicu tidak ditemukan
Karena folder DAG tidak disinkronkan dengan pemicu Airflow, kode pemicu sebaris akan hilang saat pemicu dijalankan. Error dibuat dalam log tugas yang gagal:
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
Solusi: Impor kode yang hilang dari PyPI.
Pesan peringatan tentang pemicu di UI Airflow
Dalam beberapa kasus setelah pemicu dinonaktifkan, Anda mungkin melihat pesan peringatan berikut di UI Airflow.
The triggerer does not appear to be running. Last heartbeat was received
4 hours ago. Triggers will not run, and any deferred operator will remain
deferred until it times out or fails.
Airflow dapat menampilkan pesan ini karena pemicu yang tidak lengkap tetap ada di database Airflow. Pesan ini biasanya berarti bahwa pemicu dinonaktifkan sebelum semua pemicu selesai di lingkungan Anda.
Anda dapat melihat semua pemicu yang berjalan di lingkungan dengan memeriksa halaman
Browse > Triggers di UI Airflow. Peran Admin diperlukan.
Solusi:
- Aktifkan kembali pemicu dan tunggu hingga tugas yang ditangguhkan selesai.
- Akses database Airflow dan hapus pemicu yang tidak lengkap secara manual.
Tugas tetap dalam status ditangguhkan setelah pemicu dinonaktifkan
Saat pemicu dinonaktifkan, tugas yang sudah dalam status ditangguhkan akan tetap dalam status ini hingga waktu tunggu tercapai. Waktu tunggu ini bisa tidak terbatas, bergantung pada konfigurasi Airflow dan DAG.
Gunakan salah satu solusi berikut:
- Tandai tugas sebagai gagal secara manual.
- Aktifkan pemicu untuk menyelesaikan tugas.
Sebaiknya nonaktifkan pemicu hanya jika lingkungan Anda tidak menjalankan operator atau tugas yang ditangguhkan, dan semua tugas yang ditangguhkan telah selesai.