Die Menge der zu verarbeitenden Daten ist in den letzten Jahren extrem gestiegen. Um diese Big-Data-Mengen verwalten zu können, gibt es eine Vielzahl von Tools und Frameworks. Dabei kann der Einsatz vieler Technologien anhand von Workflow Management Tools nicht nur automatisiert, sondern auch sinnvoll orchestriert werden.
Traditionellerweise bestehen viele Workflows noch aus der starren, zeitbasierten Ausführung einzelner Tasks, z.B. durch Cronjobs. Nur mit CRON alleine ist es jedoch schwierig, komplexe Workflows bzw. die Abhängigkeiten der Tasks untereinander zu verwalten. Hier kann Apache Airflow als zentrale Instanz weiterhelfen, die die Tasks der einzelnen Frameworks koordiniert und anstößt.
Was ist Apache Airflow?
Apache Airflow ist eine Open-Source-Plattform, mit der man Workflows erstellen, planen und überwachen kann. Entwickelt wurde Airflow von Airbnb um ihr komplexes Netzwerk an Aufgaben zu verwalten. Harenslak und De Ruiter stellen Airflow als Spinne in ihrem Netz dar (siehe Datapipelines with Apache Airflow Harenslak und De Ruiter – 2021): Sie sitzt in der Mitte der Datenprozesse und koordiniert dabei die Arbeiten der verschiedenen Datenframeworks.

Dabei ist Airflow selbst nicht als eigentliches Datenprozesstool zu verstehen, sondern als Orchestrierungswerkzeug, das die Datenpipelines der verwendeten Tools verwaltet und überwacht. Der Code für diese Orchestrierung wird dabei in Python verfasst und kann somit andere Frameworks sehr flexibel einbinden. Zudem ist Python als Codebasis von Airflow vorteilhaft, da es aufgrund des leichten Einstiegs und der Einfachheit als Programmiersprache weit verbreitet ist. Die Hürden sind somit niedrig, um in Airflow produktiv werden zu können.
Als einer der grössten Supporter hinter Airflow steht das 2018 gegründete Unternehmen Astronomer mit Kunden in über 35 Ländern weltweit. Dessen Hauptprodukt ist Astro, eine Datenorchestrierungsplattform, die auf Airflow basiert und als Cloudlösung angeboten wird. Zudem wird Airflow von einer aktiven Community auf Github von über 2000 Mitwirkenden ständig weiterentwickelt.
Vorteile von Apache Airflow (siehe Medium):
- Automatisierung: Mit Airflow kann man Workflows flexibel gestalten und durch Scheduling leicht automatisieren.
- Bedienerfreundliche Oberfläche und Logs: Die nutzerfreundliche graphische Oberfläche schafft einen Überblick über alle laufenden Workflows und Tasks und eignet sich daher sehr gut zum Monitoring und Verwalten. Die Logs der einzelnen Tasks sind schnell einsehbar und erleichtern das Debuggen.
- Kompatibilität und Erweiterbarkeit: Airflows Operatoren sind mit den meisten Datenbanken und Frameworks kompatibel. So gibt es beispielsweise spezielle Schnittstellen-Operatoren zu Apache Spark, Hive oder Cassandra, aber auch zu vielen Amazon bzw. AWS und Azure Cloudservices und vielen weiteren Plattformen. Die Basisoperatoren sind um Custom-Operatoren, die individuelle Bedürfnisse umsetzen können, erweiterbar.
- Dynamik: Pipelines können mithilfe von Python dynamisch erstellt und instanziiert werden.
- Resilience und Alarme: Beim Fehlschlagen von Tasks können automatische Retries eingestellt werden sowie die betroffenen Stakeholder automatisch per E‑Mail benachrichtigt werden.
Wann man Airflow einsetzen sollte:
- Wenn das Erstellen von flexiblen Datenpipelines notwendig ist. Die Vielseitigkeit von Airflow ist auf die zugrundeliegende Python-Basis zurückzuführen.
- Zur Ausführung von Pipelines zu einem bestimmten Zeitpunkt ist Airflows Scheduler eine grosse Hilfe.
- Im Falle von historischen Daten zeichnet sich Airflow durch seine Backfill-Fähigkeiten aus. So können übersprungene DAG-Läufe erneut so eingeplant werden, dass sie den vorgesehenen Zeitplan wieder einholen.
- Innerhalb eines Workflows können auch einzelne Tasks neu geladen werden. Dies ist ressourcenschonend, da nicht gesamte Abläufe neu geladen werden müssen.
- Bei dynamisch veränderbaren Pipelines. Wie bereits erwähnt, ermöglicht die Flexibilität durch die Python Basis Workflows dynamisch zu erstellen. Jedoch war Airflow bis 2.2.0 nicht für Pipelines ausgelegt, die sich bei jedem Lauf strukturell verändern (siehe Datapipelines with Apache Airflow Harenslak und De Ruiter – 2021). Dies wird sich ab der Version 2.3.0 ändern, die auch das dynamische Erstellen von Tasks zur Laufzeit unterstützen wird.
Wann man Airflow nicht einsetzen sollte:
- Für Datastreaming-Pipelines. Airflow ist hauptsächlich für den Einsatz in batchorientierten Tasks gedacht.
- In Teams ohne Python-Erfahrung. Die Implementierung und Wartung der Airflow DAGs benötigt Python-Expertise und Entwickler-Kapazität. Ist diese nicht vorhanden, würde sich ein graphischer Workflow-Manager wie z.B. Azure Data Factory eher anbieten.
Die Architektur von Airflow:
Die folgende Grafik gibt einen Überblick über die Architektur von Airflow:

Das Setup von Airflow:
Am einfachsten lässt sich Airflow in einem isolierten Dockercontainer aufsetzen. Anleitungen sind zahlreich online verfügbar, so z.B. auf Medium.
Grundlegende Konzepte:
Im Folgenden werden grundlegende Konzepte und Eckpunkte von Airflow beleuchtet.
- DAG und Task:
Ein DAG ist ein «Directed Acyclic Graph bzw. gerichteter azyklischer Graph», der Workflows abbildet und anhand einer Python-Datei definiert wird. Eine Task entspricht einem Knoten in einem DAG. Ein DAG bildet eine Datenpipeline ab, in der Tasks logisch miteinander verknüpft sind. Die Tasks sind «gerichtet», da diese jeweils eine vor- sowie nachgelagerte Task haben müssen. «Azyklisch» bedeutet, dass keine Selbstreferenzen erzeugt werden dürfen, um so Endlosschleifen zu vermeiden. «Graph» bezieht sich auf die Darstellung der Tasks in einer relationalen Struktur (s. Datascientist).
So sieht eine beispielhafte graphische Darstellung eines DAGs aus:

In diesem Beispiel werden die Tasks „runme_0‑2“ parallel ausgeführt. Die folgenden Tasks werden erst nach Abschluss der jeweils Vorhergehenden getriggert. Die Rahmenfarbe der Tasks ändert sich je nach Status. Die in diesem Fall grüne Umrandung bedeutet, dass die Tasks erfolgreich abgeschlossen wurde. Weitere Status sind z.B. „running“, „failed“, „skipped“ oder „up_for_retry“ (siehe obige Darstellung).
- Operatoren: Ein Operator bestimmt, wie die Tasks ausgeführt werden. Generell gibt es drei Kategorien an Operatoren:
- Aktions-Operatoren wie z.B. BashOperator (zur Ausführung von Bash Kommandos), PythonOperator (zur Ausführung von Python Funktionen) oder TriggerDagRunOperator (triggert einen anderen DAG) führen eine bestimmte Funktion aus. Das u.g. Beispiel zeigt einen PythonOperator, der über das Argument „python_callable“ die Python-Funktion „print_context“ aufruft:

- Transfer-Operatoren wie beispielsweise PostgresToS3Operator oder MySqlToGoogleCloudStorageOperator übertragen Daten von der Quelle zum Ziel.
- Sensor-Operatoren warten auf das Fertigstellen von Tasks. So wartet der FileSensor-Operator bis eine Datei in einem bestimmten Pfad verfügbar ist.
- Hooks: Hooks ermöglichen das Anbinden von externen APIs und Datenbanken wie z.B. Postgres, S3, Hive etc. Dabei werden sensitive Anmeldedaten auf einer verschlüsselten Metadaten-Datenbank aufbewahrt.
Die Airflow Web-Benutzeroberfläche:
Wie bereits erwähnt bietet Airflow eine informative und übersichtliche Web-Benutzeroberfläche an. Eine gute Gesamtübersicht über alle verfügbaren DAGs ist hier zu sehen:

Die obige Oberfläche gibt Auskunft über die Anzahl der erfolgreichen sowie fehlgeschlagenen Durchläufe je DAG. So signalisiert die 8 im grünen Kreis beim „example_bash_operator“-DAG ein bisher 8‑mal erfolgreiches Durchlaufen, während ein roter Kreis ein Fehlschlagen bedeuten würde. Auch wird rechts der Status der einzelnen laufenden bzw. abgeschlossenen Tasks dargestellt. Weiterhin ist im Feld „Schedule“ das aktuell geplante Zeitintervall zur Ausführung der DAGs abzulesen.
Die Tree-View bietet einen guten Überblick über die bereits gelaufenen DAGs bzw. deren Tasks:

In dieser Ansicht werden alle möglichen Pfade des DAGs inklusive der Art der verwendeten Operatoren angezeigt und es wird zudem das manuelle Neustarten von vergangenen Durchläufen ermöglicht.
Der eigentliche Python-Code, mit dem der gesamte DAG aufgebaut ist, ist in der Weboberfläche auch einsehbar:

Der Reiter Admin ist ein weiterer wichtiger Bereich der Weboberfläche. Hier können Verbindungen zu anderen Plattformen wie z.B. Datenbanken definiert werden. Ausserdem lassen sich hier wiederverwendbare Variablen und Konfigurationen festlegen:

Fazit:
Zusammenfassend ist Airflow ein vielseitig einsetzbares Workflowmanagement-Framework, dessen Flexibilität auf Python als Codebasis beruht. Seine Stärken sind die Anbindungsmöglichkeit verschiedenster Datenbanken und Daten-Frameworks, automatisches Ausführen verschiedener Pipelines durch Scheduling sowie Backfilling von vergangenen Durchläufen. Zudem ermöglicht die übersichtliche Weboberfläche eine effiziente Verwaltung sämtlicher Datenpipelines bzw. DAGs.