Jak obrócić do 1000 równoległych zadań Airflow 2.0 w 5 minut z niczego za pomocą CeleryExecutor i Kubernetes

Michał Miłosz
Michał Miłosz
June 23, 2025
9 min read
Loading the Elevenlabs Text to Speech AudioNative Player...

Nowa wersja Airflow umożliwia użytkownikom jeszcze bardziej efektywne zarządzanie workflow. Szczegółowo opisaliśmy niektóre zmiany w naszych artykułach i możemy zapewnić o poprawionej wydajności. Możliwość uruchamiania zadań równolegle w Apache Airflow, zapewniona przez wykorzystanie Kubernetes oraz Celery Executor, pozwala zaoszczędzić dużo czasu. Możesz wykorzystać to rozwiązanie do uruchomienia nawet 1000 zadań równolegle w zaledwie 5 minut. Brzmi interesująco?

Wprowadzenie
Airflow to popularne oprogramowanie do zarządzania workflow, wykorzystywane do rozwoju programów, planowania zadań i monitorowania workflow. Ma swoje możliwości i ograniczenia. Czy można uruchomić 1000 zadań równolegle w Airflow? Jak się domyślasz — tak! W tym przypadku z pomocą przychodzi Celery Executor. Airflow oferuje wiele executorów, ale do obsługi wielu zadań najlepiej sprawdza się Celery Executor. W tym ćwiczeniu wykorzystaliśmy elementy naszego najnowszego produktu, opartego na usłudze Airflow 2.0, który jest aktywnie rozwijany przez DS Stream (dlatego nie możemy udostępnić pełnego kodu do odtworzenia zadania). Jeśli jesteś zainteresowany szczegółami, skontaktuj się z działem sprzedaży. Wkrótce więcej informacji o tym projekcie pojawi się również na naszej stronie internetowej.

Celery Executor
Zacznijmy od wyjaśnienia, czym jest executor w systemie Airflow. To mechanizm, za pomocą którego realizowane są zaplanowane zadania. Worker to procesor lub węzeł, który wykonuje rzeczywiste zadanie. W przypadku zadań równoległych w Apache Airflow należy pamiętać, że samo Airflow nie uruchamia żadnych zadań. Przekazuje je executorowi, który odpowiada za uruchomienie zadania z jak najlepszym wykorzystaniem dostępnych zasobów. Celery to asynchroniczna kolejka zadań. Potrafi rozdzielać zaplanowane zadania pomiędzy wielu celery workers. Gdy używamy Celery Executor w konfiguracji Airflow, obciążenie jest rozdzielane pomiędzy wielu celery workers za pomocą message broker (np. RabbitMQ lub Redis). Executor publikuje żądanie wykonania zadania do kolejki, a jeden z kilku workers odbiera to żądanie i je realizuje. RabbitMQ to open source message broker, który zapewnia właściwy podział pracy między workers oraz skuteczną komunikację między executorem a workers. Ostatnim krokiem w poprawnej konfiguracji Celery Executor jest użycie zewnętrznej bazy danych, np. PostgreSQL. Pozwala to na planowanie zadań i przetwarzanie w czasie rzeczywistym. Baza danych jest zdalnym kontraktorem i może być wykorzystywana do skalowania horyzontalnego, gdzie workers są rozproszeni na wielu maszynach w pipeline.

properly configuring Celery Executor

Konfiguracja Airflow – zadania równoległeSystem uruchomimy na Kubernetes Service w Microsoft Azure. W tym celu należy skonfigurować Docker Image, który będzie używany w setupie Airflow. Tworząc go, korzystamy z obrazu apache/airflow w wersji 2.1.4, dostępnego na https://hub.docker.com. Kod Dockerfile znajduje się poniżej:

W folderze app/ znajduje się folder dags/ zawierający wszystkie DAGi oraz plik airflow.cfg, który służy do konfiguracji Airflow. Szablon pliku airflow.cfg jest dostępny na githubie Airflow. Oto najważniejsze parametry, które należy ustawić, aby móc uruchomić 1000 zadań równolegle z Celery Executor:

  • executor = CeleryExecutor
  • worker_concurrency = 36 (ta zmienna określa, ile zadań może być uruchomionych równolegle na jednym workerze; w tym przypadku używamy 28 workers, więc potrzebujemy 36 zadań równolegle – 28 * 36 = 1008)
  • parallelism = 1000 (umożliwia uruchomienie 1000 zadań równolegle)
  • max_active_tasks_per_dag = 1000 (umożliwia uruchomienie 1000 zadań równolegle dla jednego DAG)
  • max_queued_runs_per_dag = 1000 (pozwala na równoległe kolejkowanie 1000 zadań w jednym DAG)

Następnie należy utworzyć 4 pliki yaml, które utworzą niezbędne deployments, services i configMaps w Kubernetes:

  • namespace.yaml
  • postgres.yaml
  • airflow.yaml
  • celery.yaml

W kolejnym kroku należy przygotować środowisko Kubernetes w Azure (utworzyć klaster i zbudować obraz na podstawie wcześniej przygotowanego Dockerfile).
Po tym kroku wystarczy utworzyć wszystkie deployments na klastrze za pomocą kubectl i przygotowanych plików yaml.
Gotowe! Po kilku minutach mamy skonfigurowane środowisko Airflow, które pozwoli na uruchomienie 1000 zadań jednocześnie! Potwierdzenie tego faktu uzyskamy po uruchomieniu komendy “kubectl --namespace=airflow get all”.
DAG stworzony do tego przykładu jest zaprojektowany tak, aby usypiać na 100 sekund.

Uruchamianie zadań równoległych w Airflow — test konfiguracji
Na koniec pozostaje sprawdzić, czy zadania uruchamiają się poprawnie. W tym celu uruchamiamy przykładowy DAG.

Podsumowanie
Cieszymy się, że mogliśmy podzielić się wskazówkami dotyczącymi konfiguracji Airflow. Możesz skorzystać z naszych porad, aby płynnie uruchamiać zadania równoległe w Apache Airflow. Udowodniliśmy, że możliwe jest stworzenie środowiska Airflow w krótkim czasie, które pozwoli na uruchomienie nawet 1000 zadań równolegle! To naprawdę coś! Oznacza to, że Airflow może być wykorzystywany zarówno w małych, niewymagających projektach, jak i w znacznie większych, obejmujących setki czy nawet tysiąc zadań.
Jak Airflow może pomóc Twojej firmie? Odwiedź naszą stronę Data Pipeline Automation i znajdź rozwiązanie dopasowane do swoich potrzeb. Cały proces uruchamiania Airflow zostanie zautomatyzowany przez naszą aplikację, co pozwoli na skonfigurowanie całej infrastruktury jednym kliknięciem. W jej budowie zostaną wykorzystane nowoczesne koncepcje i technologie, takie jak CI/CD, Terraform czy Kubernetes. Po więcej szczegółów — skontaktuj się z działem sprzedaży.

Rest api w airflow 2-0 co musisz wiedziec

Airflow 2-0 poprawa wydajnosci z smart sensors

Mlops w fmcg narzedzia i technologie

Share this post
DevOps
Michał Miłosz
MORE POSTS BY THIS AUTHOR
Michał Miłosz

Curious how we can support your business?

TALK TO US