-
Airflow catch up 과 backfillAirflow 2024. 11. 10. 18:05
1. catch up
- catch up 은 DAG 가 활성화된 시점과 현재 시점 사이의 누락된 모든 과거 일정을 자동으로 실행하는 기능이다.
- DAG의 start_date 부터 현재까지의 누락된 실행을 자동으로 처리한다.
catchup=True
파라미터로 설정할 수 있다.
예시:
with DAG( 'example_dag', start_date=datetime(2024, 1, 1), schedule_interval='@daily', catchup=True ) as dag: # tasks here
2. backfill
- Backfill 수동으로 특정 기간의 DAG 실행을 처리하는 명령어
- 시작 날짜와 종료 날짜를 지정하여 해당 기간의 테스크를 실행
- CLI 명령어를 통해 실행
예시:
from airflow import DAG from datetime import datetime dag = DAG( 'parallel_control_example', start_date=datetime(2024, 1, 1), schedule_interval='@daily', # DAG 수준의 병렬 처리 제어 max_active_runs=3, # 동시에 실행될 수 있는 DAG 인스턴스 수 concurrency=16 # DAG 내의 전체 task 동시 실행 수 )
# 일자 기준으로 설정하는 경우 airflow dags backfill \ example_dag \ --start-date 2024-01-01 \ --end-date 2024-01-31 # 시간대 까지 설정이 필요한 경우 airflow dags backfill \ example_dag \ --start-date 2024-01-01T16:00:00 \ --end-date 2024-01-31T05:00:00
3. 주요 차이점
- 실행 방식
- Catch up: DAG 활성화 시 자동으로 실행
- Backfill: 수동으로 명령어를 통해 실행
- 제어 범위
- Catch up: start_date부터 현재까지 전체 범위
- Backfill: 지정한 특정 기간만 실행
- 유연성
- Catch up: DAG 설정에 따라 자동 실행
- Backfill: 실행 시점, 범위 등을 세밀하게 제어 가능
4. 선택 기준
- catch up 이 유리한 경우
- 새로운 DAG 를 처음 배포할 떄
- 정기적인 데이터 처리가 필요한 경우
- 누락도니 실행을 자동으로 처리하고 싶을 때
- 운영자의 수동 개입을 최소화하고 싶을 때
- backfill 이 유리한 경우
- 특정 기간의 데이터만 재처리가 필요한 경우
- 데이터 수정이나 버그 수정 후 재실행이 필요할 때
- 리소스 사용을 세밀하게 제어해야 할 때
- 테스트나 검증을 위해 특정 기간만 실행하고 싶은ㄹ 때
- 대규모 이력 데이터 처리가 필요한 경우
5. 실제 운영 팁
- 새로운 DAG 배포 시에는 초기에
catchup=False
로 설정하고 테스트 후, 필요한 경우 backfill 을 사용하여 이전 데이터를 처리하는 것이 안전할 수 있다. - 리소스 사용량이 중요한 경우, backfill 을 사용하여 실행 시점과 병렬 처리 수준을 제어하는 것이 좋다.