Airflow

Airflow catch up 과 backfill

5linesys 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. 주요 차이점

  1. 실행 방식
    • Catch up: DAG 활성화 시 자동으로 실행
    • Backfill: 수동으로 명령어를 통해 실행
  2. 제어 범위
    • Catch up: start_date부터 현재까지 전체 범위
    • Backfill: 지정한 특정 기간만 실행
  3. 유연성
    • Catch up: DAG 설정에 따라 자동 실행
    • Backfill: 실행 시점, 범위 등을 세밀하게 제어 가능

4. 선택 기준

  • catch up 이 유리한 경우
    1. 새로운 DAG 를 처음 배포할 떄
    2. 정기적인 데이터 처리가 필요한 경우
    3. 누락도니 실행을 자동으로 처리하고 싶을 때
    4. 운영자의 수동 개입을 최소화하고 싶을 때
  • backfill 이 유리한 경우
    1. 특정 기간의 데이터만 재처리가 필요한 경우
    2. 데이터 수정이나 버그 수정 후 재실행이 필요할 때
    3. 리소스 사용을 세밀하게 제어해야 할 때
    4. 테스트나 검증을 위해 특정 기간만 실행하고 싶은ㄹ 때
    5. 대규모 이력 데이터 처리가 필요한 경우

5. 실제 운영 팁

  • 새로운 DAG 배포 시에는 초기에 catchup=False 로 설정하고 테스트 후, 필요한 경우 backfill 을 사용하여 이전 데이터를 처리하는 것이 안전할 수 있다.
  • 리소스 사용량이 중요한 경우, backfill 을 사용하여 실행 시점과 병렬 처리 수준을 제어하는 것이 좋다.