Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Halaman ini memberikan langkah-langkah pemecahan masalah dan informasi untuk dengan pemicu Airflow.
Operasi pemblokiran pada pemicu
Tugas asinkron terkadang dapat diblokir di pemicu. Umumnya, masalah berasal dari resource pemicu yang tidak memadai atau masalah dengan kode operator asinkron khusus.
Log pemicu menampilkan pesan peringatan yang dapat membantu Anda mengidentifikasi penyebab utama penurunan performa pemicu. Ada dua peringatan yang signifikan untuk diwaspadai.
Thread asinkron diblokir
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
Peringatan ini menandakan masalah terkait performa karena banyaknya tugas asinkron.
Solusi: Untuk mengatasi masalah ini, mengalokasikan lebih banyak resource ke pemicu, mengurangi jumlah tugas tertunda yang dieksekusi pada saat bersamaan, atau meningkatkan jumlah pemicu di lingkungan Anda. Perlu diingat bahwa meskipun pemicu menangani tugas yang dapat ditangguhkan, pekerja yang bertanggung jawab untuk memulai dan pada akhirnya menyelesaikan setiap tugas. Jika Anda menyesuaikan jumlah pemicu, pertimbangkan juga untuk menskalakan jumlah instance worker.
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 berdasarkan desain harus mengandalkan library
asyncio
untuk yang menjalankan operasi di latar belakang. Implementasi kustom dari suatu pemicu dapat gagal mematuhi kontrakasyncio
dengan benar (misalnya karena kesalahan penggunaan kata kunciawait
danasync
dalam kode Python).Solusi: Periksa kode yang dilaporkan oleh peringatan dan periksa apakah asinkron diterapkan dengan benar.
Terlalu banyak pemicu
Jumlah tugas yang ditangguhkan terlihat dalam metrik task_count
yang
juga ditampilkan di dasbor Monitoring lingkungan Anda. Setiap pemicu
membuat beberapa sumber daya seperti koneksi
ke sumber daya eksternal, yang memakai
memori.
Grafik konsumsi memori dan CPU menunjukkan bahwa sumber daya yang tidak memadai menyebabkan dimulai ulang karena pemeriksaan keaktifan gagal karena detak jantung yang hilang:
Solusi: Untuk mengatasi masalah ini, mengalokasikan lebih banyak resource ke pemicu, mengurangi jumlah tugas tertunda yang dieksekusi pada saat bersamaan, atau meningkatkan jumlah pemicu di lingkungan Anda.
Error pekerja Airflow selama eksekusi callback
Setelah pemicu menyelesaikan eksekusi, kontrol kembali ke Airflow
, yang menjalankan metode callback menggunakan slot eksekusi. Fase ini adalah
dikontrol oleh Celery Executor dan oleh karena itu konfigurasi yang sesuai dan
berlaku batas resource (seperti parallelism
atau worker_concurrency
).
Jika metode callback gagal dalam worker Airflow, worker akan gagal, atau
worker yang menjalankan metode akan dimulai ulang, maka tugas ditandai sebagai FAILED
. Di beberapa
dalam hal ini, operasi percobaan ulang mengeksekusi ulang seluruh tugas, tidak hanya
.
Loop tanpa batas pada pemicu
Anda dapat menerapkan operator pemicu kustom sedemikian rupa sehingga sepenuhnya memblokir loop pemicu utama, sehingga hanya satu pemicu rusak yang yang dijalankan pada saat itu. Dalam hal ini, peringatan dibuat di log pemicu setelah pemicu yang bermasalah selesai.
Class pemicu tidak ditemukan
Karena folder DAG tidak disinkronkan dengan pemicu Airflow, kode pemicu inline tidak ada bila pemicu dieksekusi. Errornya adalah dibuat di 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 hal berikut pesan peringatan 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 Airflow di skrip untuk menyiapkan database. Pesan ini biasanya berarti bahwa pemicu telah dinonaktifkan sebelum telah diselesaikan di lingkungan Anda.
Anda dapat melihat semua pemicu yang berjalan di lingkungan dengan memeriksa
Jelajahi > halaman Pemicu di UI Airflow (peran Admin
adalah
wajib diisi).
Solusi:
- Aktifkan pemicu lagi dan tunggu tugas-tugas yang ditangguhkan untuk diselesaikan.
- Mengakses database Airflow dan menghapus pemicu tidak lengkap secara manual.
Tugas tetap dalam status ditangguhkan setelah pemicu dinonaktifkan
Saat pemicu dinonaktifkan, tugas yang sudah dalam status ditangguhkan tetap dalam status ini sampai waktu tunggu tercapai. Waktu tunggu ini dapat tak terbatas, bergantung pada konfigurasi Airflow dan DAG.
Gunakan salah satu solusi berikut:
- Tandai tugas secara manual sebagai gagal.
- Aktifkan pemicu untuk menyelesaikan tugas.
Sebaiknya nonaktifkan pemicu hanya jika lingkungan Anda tidak menjalankan pemicu apa pun operator atau tugas yang ditangguhkan, dan semua tugas yang ditangguhkan telah selesai.