ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Airflow catch up 과 backfill
    Airflow 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 을 사용하여 실행 시점과 병렬 처리 수준을 제어하는 것이 좋다.
Designed by Tistory.