Apache Airflow

[Airflow] Concurrency 설정

비번변경 2023. 7. 19. 23:03

개요

Airflow로 많은 Dag와 Task를 동시에 병렬로 처리할 때는 Concurrency와 같은 설정은 서버 스펙이나 다른 요소를 고려하여 조정할 필요가 있다. Airflow는 처리량을 조정하기 위해 몇 가지 설정을 제공하는데 이 글에서는 관련 설정에 대해 정리해두려고 한다.

 

 

시스템 수준 설정

parallelism

Airflow 스케쥴러 당 동시에 실행할 수 있는 최대 Task Instance 수.

기본값은 32이다. 즉, Airflow 스케쥴러 하나당 최대 32개의 Task 실행을 관리할 수 있다.

 

max_active_runs_per_dag

각 Dag 당 실행할 수 있는 최대 Dag_run 수.

기본값은 16이다. max_active_runs_per_dag 값이 Dag 수준 설정인 max_active_runs의 기본값이 된다.

 

max_active_tasks_per_dag (기존 : dag_concurrency)

각 Dag 당 동시에 실행할 수 있는 최대 Task Instance 수. 모든 Dag_run에 대해 동시에 실행할 수 있는 Task 수를 결정한다.

기본값은 16이다. max_active_tasks_per_dag의 값이 Dag 수준 설정인 max_active_tasks의 기본값이 된다.

 

worker_concurrency

각 Celery Worker 서버에서 실행할 수 있는 Task Instance의 수.

기본값은 16이다. 

 

worker_autoscale

각 Celery Worker 서버에서 실행할 수 있는 Task Instance의 최소 개수와 최대 개수를 지정한다.

최소 개수의 Task 실행을 유지하지만 필요 시 최대 개수만큼의 Task를 실행할 수 있다. '최대 개수,최소 개수' 형식으로 지정하며, worker_autoscale 설정 시 worker_concurrency 설정은 무시된다.

 

 

Dag 수준 설정

만약 특정 Dag는 시스템 수준 설정과 다르게 정의되어야 한다면 Dag 수준에서 처리량을 조절할 수 있다. Dag 생성 시 생성자 매개변수를 통해 설정한다.

dag = DAG(
    'docker_test',
    default_args=default_args,
    description='echo "hello, world!"',
    schedule=timedelta(days=1),
    max_active_runs=2,
    max_active_tasks=8
)

 

max_active_runs

시스템 수준 설정인 max_active_runs_per_dag를 재정의한다. 즉, Dag에서 실행할 수 있는 최대 Dag_run 수를 결정한다.

 

max_active_tasks (기존 concurrency)

시스템 수준 설정인 max_active_tasks_per_dag를 재정의한다.즉, Dag의 모든 Dag_run에 대해 동시에 실행할 수 있는 Task 수를 결정한다.

 

 

Task/Operator 수준 설정

Dag에서 정의되는 Task마다의 동시성을 제어할 수도 있다.

 

max_active_tis_per_dag (기존 task_concurrency)

여러 Dag_run에서 해당 Task를 최대로 실행할 수 있는 Instance 수. 

 

max_active_tis_per_dagrun

Dag_run 당 동시에 실행할 수 있는 task Instance 수

 

 

참고 문서

https://jybaek.tistory.com/923

Airflow 조그맣게 시작하기 - 다양한 parallelism

Airflow Concurrency

https://airflow.apache.org/docs/apache-airflow/stable/faq.html

https://stackoverflow.com/a/63955004/4599185