Как увеличить задачи в очереди в секунду?
Я пытаюсь диагностировать неэффективный трубопровод воздушного потока и мне интересно, какую производительность мне следует ожидать от планировщика воздушного потока в терминах, аналогичных "задачам, запланированным в секунду".
У меня есть несколько заданий в очереди, и многие из моих задач заканчиваются за секунды, поэтому я подозреваю, что планировщик является ограничивающим компонентом, и я виноват в том, что у меня было много быстрых задач. Тем не менее, я бы не стал переписывать свои DAG, если этого можно избежать.
Что я могу сделать, чтобы увеличить скорость, с которой планировщик ставит задачи в очередь?
Детали трубопровода
Вот как выглядит мой текущий файл airflow.cfg.
У меня только два бега. Один запланирован каждые 5 минут, а другой редко срабатывает первым. В настоящее время я пытаюсь засыпать несколько лет с такой частотой, но, возможно, придется изменить мой подход:
Что касается рабочих узлов: в настоящее время у меня есть 4 довольно мощных сервера, которые используют менее 10% ресурсов в дисках, сети, процессорах, оперативной памяти, подкачке. Отключение 3-х рабочих не влияет на пропускную способность моей задачи, а оставленный сервер едва регистрирует изменение рабочей нагрузки.
1 ответ
Есть несколько значений конфигурации в вашем airflow.cfg
это может быть связано с этим.
Под [core]
:
- параллелизм: общее количество экземпляров задач, которые могут выполняться одновременно.
- dag_concurrency: ограничение количества экземпляров задач, которые могут выполняться за один прогон DAG, может потребоваться увеличить, если у вас много параллельных задач. Может переопределять при определении DAG.
- non_pooled_task_slot_count: лимит задач без настроенного пула, который может работать сразу.
- max_active_dag_runs_per_dag: если вы запускаете запуски вручную или есть резервная копия запусков DAG, запланированных с коротким интервалом. Может переопределять при определении DAG.
Под [scheduler]
:
- schedule_heartbeat_sec: определяет, как часто запускается планировщик, попробуйте его с меньшими значениями.
- min_file_process_interval: обрабатывать каждый файл не чаще, чем раз в N секунд. Установите 0, чтобы никогда не ограничивать частоту обработки файла.
Под [worker]
:
- celeryd_concurrency: количество рабочих, с которыми будет работать сельдерей, так что, по сути, количество экземпляров задач, которые рабочий может выполнить одновременно. Соответствие количеству процессоров является популярной отправной точкой, но, безусловно, может пойти еще выше.
Последний только если вы используете CeleryExecutor
, что я определенно рекомендую, если вы хотите увеличить пропускную способность.