[Airflow] Composer에서 worker 숫자가 늘지 않았던 일
문제 상황
회사에서 GCP에서 프로젝트를 하고 있다.
Airflow가 필요하니 Cloud Composer를 사용하고 있는데 당연히 병렬 처리가 필요하다.
Composer 2는 Autoscaling을 지원하기에 Worker 수를 최소 1개, 최대 10개로 지정해놨다.
그런데 문제는 모니터링해보니 아무리 작업을 추가해도 Worker 수가 1개에서 늘지가 않는다!
심지어 메모리가 부족해서 fail이 발생하는데도 Worker 수는 늘리지 않는다.
삽질
이런 저런 추론을 해봤다.
1. Celery Executor 설정이 안된건 아닐까?
내가 알기론 Sequential Executor가 Airflow default값이고, 병렬 실행을 지원하지 않는것으로 알고있다.
확인해보니 Composer에서는 기본으로 Celery Executor로 지정되어있다.
2. concurrency 관련 설정이 잘못된건 아닐까?
혹시 동시 실행 수가 잘못 설정되었나해서 살펴봤다.
dag_concurrency, worker_concurrency, parallelism 등 이것저것 봤는데 괜찮았다.
parallelism이 기본값이 32인걸로 아는데 0으로 설정되어있어서 당황했다.
확인해보니 0이면 unlimited라고 한다.
3. 리소스 사용이 충분치 않아서 늘리지 않는걸까?
CPU 사용을 100%로 만들어도 늘지 않았다. (ML)
해결
결론적으로 worker_concurrency에 대한 오해 때문이었다.
대충 보고 동시에 사용할 수 있는 worker 수라고 생각했다.
그러니 당연히 크면 좋다고 생각했다.
답변도 없는 한 stackoverflow 글에서 힌트를 얻고 다시 봤는데
number of task instances that a worker will take
즉, 이 숫자가 크면 하나의 worker가 가지는 task수가 많아지므로 worker가 늘지 않는다.
확인해보니 composer가 96으로 설정해뒀다.
1로 바꾸어서 1개의 worker는 1개의 task만 처리하도록 했더니 드디어 정상적으로 worker수가 늘어난다.