프로젝트에서 사용중인 airflow의 webserver 속도가 느리다는 피드백이 종종 있었습니다.
webserver의 ui이 등장할 때, Variables, Connetions의 정보를 화면에서 보여줄 때
같은 상황에서 짧으면 3초 길면30초 이상 화면이 느리게 등장했던 이슈가 있어 약간의 속도개선을 한 경험을 공유하려고 합니다.
체감상 빨라진 경우이며, 다양한 케이스를 확인한 것이 아닙니다.
구글링을 해보아도 속도 문제를 개선한 사례들이 많이 없어, 원인을 찾아보며 개선하려고 하고 있습니다.
몇가지 영향을 주었을 것 같은 작업들을 나열하겠습니다.
1. Airflow DB 관련 작업
현재 사용중인 airflow는 kubernetes위에서 동작하며, kubernetes excuter를 사용하고 있습니다.
Kubernetes Executor — apache-airflow-providers-cncf-kubernetes Documentation
airflow.apache.org
airflow 공식문서에 나와있는 아키텍처를 확인하면 모두 metadata DB를 바라보고 있습니다.
DB clean 작업
metadataDB에서 가져와야할 데이터가 많아, ui가 느릴수 있다는 생각을 하였습니다.
기존에도 db clean 작업을 수행했지만 6개월 이전 데이터까지 저장중이던 것을 2개월로 단축시켰습니다.
Using the Command Line Interface — Airflow Documentation
airflow.apache.org
Dag 정리
또한 git-sync를 통하여 github에 저장되어 있는 Dag코드를 주기적으로 불러와서 DB 저장중인데,
사용하지 않는 Dag를 정리해주었습니다.
2. Webserver worker 수 변경
위 두 작업으로도 약간의 개선은 있었지만, 간혈적으로 느려지는 현상들이 발견되었습니다.
webserver log를 살펴보던 중, ui가 느리게 동작할 때 webserver의 worker들이 kill되었다가 restart되는 것을 보게되었습니다.
airflow의 job을 수행하는 celery worker가 아닙니다.
airflow webserver flask로 만들어졌고, flask는 WSGI(Web Server Gateway Interface)로 gunicorn을 사용하고 있습니다.
gunicorn의 worker의 수를 늘려줄 수 있는 환경변수(AIRFLOW__WEBSERVER__WORKERS)가 있습니다.
Configuration Reference — Airflow Documentation
airflow.apache.org
webserver worker의 수를 default 4개에서 8개로 증가시켜 webserver의 속도를 개선할 수 있었습니다.
감사합니다.
'데이터 엔지니어링' 카테고리의 다른 글
[KAFKA] 기록#1 [listeners vs advertised.listeners] feat Nifi (0) | 2024.11.28 |
---|---|
[Trino] id/password 적용하기 (0) | 2024.10.25 |
[PyFlink] 기록 # 2 Iceberg 도입시 Error (1) | 2024.09.21 |
[PyFlink] 기록#1 Dictionary in List 처리 (1) | 2024.08.31 |
[Flink] Flink Architecture (0) | 2024.08.24 |