Ответ 1
Как сказал Ник, Airflow - это не инструмент реального времени. Задачи планируются и выполняются как можно скорее, но следующая задача никогда не будет запущена сразу после последней.
Если у вас есть более ~ 100 групп DAG с ~ 3 задачами в каждой или Dags с множеством задач (~ 100 или более), вы должны учитывать 3 вещи:
- Увеличьте количество потоков, которые DagFileProcessorManager будет использовать для загрузки и выполнения Dags (airflow.cfg):
[scheduler]
max_threads = 2
Параметр max_threads управляет количеством DAG, которые выбираются, исполняются/закрываются (см. Здесь).
Увеличение этой конфигурации может сократить время между заданиями.
- Контролируйте свою базу данных Airflow, чтобы увидеть, есть ли в ней узкие места. База данных Airflow используется для управления и выполнения процессов:
Недавно мы страдали от той же проблемы. Время между заданиями составляло ~ 10-15 минут, мы использовали PostgreSQL на AWS.
Экземпляр не очень хорошо использовал ресурсы; ~ 20 операций ввода-вывода в секунду, 20% памяти и ~ 10% процессора, но поток воздуха был очень медленным.
Изучив производительность базы данных с помощью PgHero, мы обнаружили, что даже запрос, использующий индекс для небольшой таблицы, тратит более одной секунды.
Таким образом, мы увеличили размер базы данных, и теперь Airflow работает так же быстро, как ракета. :)
- Чтобы узнать время, которое Airflow тратит на загрузку Dags, выполните команду:
airflow list_dags -r
DagBag parsing time: 7.9497220000000075
Если время разбора DagBag превышает ~ 5 минут, это может быть проблемой.
Все это помогло нам запустить Airflow быстрее. Я действительно советую вам обновиться до версии 1.9, так как в этой версии исправлено много проблем с производительностью
Кстати, мы используем Airflow master в производстве, с LocalExecutor и PostgreSQL в качестве базы данных метаданных.