Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
이 페이지에서는 Airflow 트리거의 일반적인 문제에 대한 문제 해결 단계 및 정보를 제공합니다.
트리거의 작업 차단
비동기 태스크가 트리거에서 차단되는 경우가 있습니다. 대부분의 경우 이 문제는 트리거 리소스가 충분하지 않거나 커스텀 비동기 연산자 코드에 문제가 있기 때문에 발생합니다.
트리거 로그는 트리거 성능 저하의 근본 원인을 파악하는 데 도움이 되는 경고 메시지를 표시합니다. 확인해야 할 두 가지 중요한 경고가 있습니다.
비동기 스레드가 차단되었습니다.
Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
이 경고는 비동기 태스크가 많아 성능 문제가 있음을 나타냅니다.
해결책: 이 문제를 해결하려면 트리거에 리소스를 더 할당하고 동시에 실행되는 지연된 태스크 수를 줄이거나 사용자 환경에서 트리거 수를 늘립니다. 트리거가 지연 가능한 태스크를 처리하더라도 각 태스크를 시작하고 최종적으로 완료하는 것은 작업자의 책임입니다. 트리거 수를 조정할 경우 작업자 인스턴스 수를 확장하는 것도 좋습니다.
특정 태스크가 비동기 스레드를 차단했습니다.
WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/my-custom-code.py:609> result=None> took 0.401 second
이 경고는 Cloud Composer에서 실행되는 특정 연산자 코드를 가리킵니다. 기본적으로 트리거는 백그라운드에서 작업을 실행하기 위해
asyncio
라이브러리를 사용해야 합니다. Python 코드의await
및async
키워드가 잘못 사용되는 등 트리거의 커스텀 구현이asyncio
계약을 제대로 준수하지 못할 수 있습니다.솔루션: 경고로 보고된 코드를 검사하고 비동기 작업이 올바르게 구현되었는지 확인합니다.
너무 많은 트리거
지연된 태스크 수는 환경의 Monitoring 대시보드에도 표시되는 task_count
측정항목에 표시됩니다. 각 트리거는 메모리를 사용하는 외부 리소스 연결과 같은 일부 리소스를 만듭니다.
메모리와 CPU 소비의 그래프는 하트비트 누락으로 인해 활성 프로브가 실패하기 때문에 리소스 부족으로 인해 다시 시작됨을 나타냅니다.
해결책: 이 문제를 해결하려면 트리거에 리소스를 더 할당하고 동시에 실행되는 지연된 태스크 수를 줄이거나 사용자 환경에서 트리거 수를 늘립니다.
콜백 실행 중 Airflow 작업자 비정상 종료
트리거가 실행을 완료하면 컨트롤이 실행 슬롯을 사용하여 콜백 메서드를 실행하는 Airflow 작업자로 돌아갑니다. 이 단계는 Celery Executor에 의해 제어되므로 해당 구성 및 리소스 한도(예: parallelism
또는 worker_concurrency
)가 적용됩니다.
Airflow 작업자에서 콜백 메서드가 실패하거나 작업자가 실패하거나 메서드를 실행하는 작업자가 다시 시작되면 태스크가 FAILED
로 표시됩니다. 이 경우 재시도 작업은 콜백 메서드뿐만 아니라 전체 태스크를 다시 실행합니다.
트리거의 무한 루프
기본 트리거 루프를 완전히 차단하여 한 번에 하나의 손상된 트리거만 실행되도록 커스텀 트리거 연산자를 구현할 수 있습니다. 이 경우 문제가 있는 트리거가 완료되면 경고가 트리거 로그에 생성됩니다.
트리거 클래스를 찾을 수 없음
DAG 폴더는 Airflow 트리거와 동기화되지 않으므로 트리거가 실행될 때 인라인 트리거 코드가 누락됩니다. 이 오류는 실패한 태스크의 로그에 생성됩니다.
ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class
해결책: PyPI에서 누락된 코드를 가져옵니다.
Airflow UI의 트리거에 대한 경고 메시지
경우에 따라 트리거가 사용 중지된 후 Airflow UI에 다음과 같은 경고 메시지가 표시될 수 있습니다.
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 데이터베이스에 남아 있으므로 Airflow는 이 메시지를 표시할 수 있습니다. 이 메시지는 일반적으로 환경에서 모든 트리거가 완료되기 전에 트리거가 사용 중지되었음을 의미합니다.
환경에서 실행 중인 모든 트리거를 보려면 Airflow UI에서 찾아보기 > 트리거 페이지를 확인합니다(Admin
역할 필요).
해결책:
- 다시 트리거를 사용 설정하고 지연된 태스크가 완료될 때까지 기다립니다.
- Airflow 데이터베이스에 액세스하고 불완전한 트리거를 수동으로 삭제합니다.
트리거가 사용 중지된 후 태스크가 지연된 상태로 유지
트리거가 사용 중지되면 지연된 상태에 있는 태스크는 제한 시간에 도달할 때까지 이 상태로 유지됩니다. 이 제한 시간은 Airflow와 DAG 구성에 따라 무한할 수 있습니다.
다음 해결 방법 중 하나를 사용하세요.
- 수동으로 태스크를 실패로 표시합니다.
- 트리거를 사용 설정하여 태스크를 완료합니다.
환경에서 지연된 연산자나 작업을 실행하지 않고 모든 지연된 태스크가 완료된 경우에만 트리거를 사용 중지하는 것이 좋습니다.