Мы создали Airbnb/Apache Airflow для нашего ETL, используя LocalExecutor
, и по мере того, как мы начали создавать более сложные группы DAG, мы заметили, что Airflow начинает использовать невероятные объемы системных ресурсов. Это удивительно для нас, потому что мы в основном используем Airflow для организации задач, которые происходят на других серверах, поэтому DAG для Airflow проводят большую часть своего времени, ожидая их завершения, - нет реального выполнения, которое происходит локально.
Самая большая проблема заключается в том, что Airflow все время использует до 100% процессора (на AWS t2.medium) и использует более 2 ГБ памяти с настройками по умолчанию airflow.cfg.
Если это уместно, мы запускаем Airflow, используя docker-compose, запускающую контейнер дважды; один раз как scheduler
и один раз как webserver
.
Что мы делаем неправильно здесь? Это нормально?
EDIT:
Вот результат из htop
, упорядоченный по используемой памяти% (поскольку это, похоже, сейчас является основной проблемой, я потерял CPU):
Я полагаю, что в теории я мог бы уменьшить количество рабочих-пулеметов (это было по умолчанию 4), но я не уверен, что все процессы /usr/bin/dockerd
. Если Docker усложняет то, что я могу удалить, но это сделало развертывание изменений очень легким, и я предпочел бы не удалять его, если это возможно.