Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Halaman ini memberikan langkah-langkah pemecahan masalah dan informasi untuk masalah umum dengan pemicu Airflow.
Memblokir operasi di pemicu
Tugas asinkron terkadang mungkin diblokir di pemicu. Pada umumnya, masalah berasal dari resource pemicu yang tidak memadai atau masalah pada kode operator asinkron kustom.
Log pemicu menampilkan pesan peringatan yang dapat membantu Anda mengidentifikasi akar penyebab penurunan performa pemicu. Ada dua peringatan signifikan yang perlu dicari.
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, alokasikan lebih banyak resource ke pemicu, kurangi jumlah tugas yang ditangguhkan yang dijalankan secara bersamaan, atau tingkatkan jumlah pemicu di lingkungan Anda. Perlu diingat bahwa meskipun pemicu menangani tugas yang dapat ditangguhkan, pekerjalah yang bertanggung jawab untuk memulai dan akhirnya menyelesaikan setiap tugas. Jika Anda menyesuaikan jumlah pemicu, pertimbangkan juga untuk menskalakan jumlah instance pekerja.
Tugas tertentu memblokir thread asinkron.
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/my-custom-code.py:609> result=None> took 0.401 second
Peringatan ini mengarah ke bagian kode operator tertentu yang dieksekusi oleh Cloud Composer. Pemicu secara desain harus mengandalkan library
asyncio
untuk menjalankan operasi di latar belakang. Implementasi kustom pemicu dapat gagal mematuhi kontrakasyncio
dengan benar (misalnya karena penggunaan kata kunciawait
danasync
yang salah dalam kode Python).Solusi: Periksa kode yang dilaporkan oleh peringatan dan periksa apakah operasi asinkron diterapkan dengan benar.
Terlalu banyak pemicu
Jumlah tugas yang ditangguhkan dapat dilihat di 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 konsumsi memori dan CPU menunjukkan bahwa resource yang tidak memadai menyebabkan mulai ulang karena pemeriksaan keaktifan gagal karena tidak ada heartbeat:
Solusi: Untuk mengatasi masalah ini, alokasikan lebih banyak resource ke pemicu, kurangi jumlah tugas yang ditangguhkan yang dijalankan secara bersamaan, atau tingkatkan jumlah pemicu di lingkungan Anda.
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 akan berlaku (seperti parallelism
atau worker_concurrency
).
Jika metode callback gagal di pekerja Airflow, pekerja akan gagal, atau pekerja yang menjalankan metode akan dimulai ulang, maka tugas akan ditandai sebagai FAILED
. Dalam
hal ini, operasi percobaan ulang akan mengeksekusi ulang seluruh tugas, bukan hanya
metode callback.
Loop tanpa batas di pemicu
Operator pemicu kustom dapat diterapkan sedemikian rupa sehingga sepenuhnya memblokir loop pemicu utama, sehingga hanya satu pemicu yang rusak yang dieksekusi pada saat itu. Dalam hal ini, peringatan dibuat dalam log pemicu setelah pemicu yang bermasalah selesai.
Class pemicu tidak ditemukan
Karena folder DAG tidak disinkronkan dengan pemicu Airflow, kode pemicu yang disisipkan tidak ada saat pemicu dijalankan. Error ini dibuat dalam log tugas yang gagal:
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
Solusi: Impor kode yang tidak ada 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 pemicu lagi 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
Jika pemicu dinonaktifkan, tugas yang sudah dalam status ditangguhkan akan tetap dalam status ini hingga waktu tunggu tercapai. Waktu tunggu ini dapat tidak terbatas, bergantung pada konfigurasi Airflow dan DAG.
Gunakan salah satu solusi berikut:
- Tandai tugas secara manual sebagai gagal.
- Mengaktifkan 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.