Airflow может выполнять задачи параллельно, и он может использовать Celery для достижения этой цели.Все остальное зависит от вас, чтобы реализовать, как вы считаете нужным, нет никаких специфических особенностей, связанных с Airflow / Celery относительно вашего предполагаемого использования.В конце концов, если все, что вас волнует, - это параллельное выполнение вашей работы и вас мало волнуют другие функции Airflow, вам может быть лучше использовать только Celery.
Есть много разных способов сделать это, ноВот кое-что для начала:
- Задачи воздушного потока должны быть как можно более "тупыми", то есть принимать входные данные, обрабатывать их и сохранять выходные данные.Не размещайте здесь логику разделения файлов.Вы можете иметь специальную группу DAG для этого, если это необходимо.Например, у вас может быть группа обеспечения доступности баз данных, которая читает входной файл и разбивает его на части с помощью некоторой логики, а затем сохраняет его где-то для задач (удобная структура файла, очередь сообщений, дБ и т. Д.)
- Решитьв месте для ваших входных данных, так что задачи могут легко получить ограниченный объем ввода.Например, если вы используете файловую структуру, где один обрабатываемый фрагмент представляет собой один файл, задача может получить чтение одного файла и удалить его.Повторяйте, пока не останется ни одного фрагмента / файла.То же самое касается любого другого способа, например, если вы используете очередь сообщений, вы можете использовать куски.Убедитесь, что у вас есть оригинальный DAG, готовый снова разделить входной файл на куски, если это необходимо.Вы можете сделать это настолько простым или сложным, насколько захотите.
- Не упустите идемпотентность, например, убедитесь, что ваш процесс может быть повторен без побочных эффектов.Если вы потеряете данные на каком-то этапе, вы можете просто перезапустить все без проблем.