airflow config 파일을 보면 아주 많은 파라미터들이 존재한다.
천줄이 넘어간다... 이게 맞냐??
이중에서 뭐 대부분은 그때 그때 구글링하면서 넘어갈 수 있겠지만 몇가지 알아두면 좋을 파라미터들만 소개하고자 한다.
위의 주석을 잘 읽어보면 알겠지만 airflow instance 가 동시 다발적으로 task를 수행할 수 있는 상한을 정하는 파라미터이다.
상한이 32 일때는 한번에 3개도 가능하다.
만약에 위의 상한이 1이게 된다면 어떻게 되는 것 일까?
한번해보자.
parallelism = 1
으로 설정 후 스케쥴러만 껏다가 다시 키자.
하나씩 순차적으로 진행된다. 이처럼 parallelism은 동시에 수행할 수 있는 task의 숫자의 상한을 걸어 놓게 되는 것이다. (at entire airflow instance)
조금 더 명확히 적어 놓으면 아래와 같다.
전체 airflow에서 동시에 수행될 수 있는 task의 갯수의 상한을 정하는 것이 parallelism 이다.
우리는 하나의 dag를 여러번 수행할 수도 있다.
구체적으로 2022-01-01 에 중단한 파이프 라인 하나를 오늘 다시 가동시켜서 2022-06-09까지의 공백을 채우고자 한다. (catchup=True 인 경우)
이럴 때 우리는 매일 매일 순차적으로 task를 진행하되, 이전 날짜의 task1 가 끝나면 다음 날짜의 task1을 수행하고 순차적으로 task1들을 모두 끝내게 된다.
그런데 굳이 이럴 필요없이 의존성이 없는 해당 날짜들은 그냥 그대로 쭉 밀고나가면 되지 않나 라는 생각이 들 수도 있다.
이게 바로 dag_concurrency
의 개념이다.
dag_concurrency parameter를 1로 설정하고 catchup을 true로 주고 한번 실행시켜보자.
하나씩 느리게 진행된다.
동시 다발적으로 수행되고 있다.
이제 그럼 명확히 설명할 수 있다.
dag_concurrency parameter 란 하나의 dag에서 동시다발적으로 수행될 수 있는 상한을 정하는 것이다.
parallelism > 4
dag_concurrency > 8 이면 dag에서 동시에 수행될 수 있는 task는 몇인가?
답은 4이다. dag_concurrency가 아무리 높아도 airflow instance가 수행할 수 있는 task의 상한은 4이기 때문이다.
이처럼 dag_concurrency는 parallelism에 종속된다.
여기까지 따라왔다면 정말 굿!
해당 파라미터는 위의 interval 별로 실행되는 dag의 갯수를 제한할 때 사용된다.
위의 column의 수는 정확히 16개이다. (동그라미 쳐져있는 것만)
켜놓지 않은 기간이 긴 dag가 너무 많은 리소스를 잡아먹을 때 사용하면 좋은 파라미터이다.
위의 파라미터들은 cfg에서 컨트롤 하는 것보다 dag 객체를 선언할 때 같이 파라미터로 주는 것이 더 적절하다.
구체적으로 아래와 같이 수행하면 좋다.