In der Welt des Bankings, wo jede Sekunde zählt, ist die effiziente Verarbeitung von Daten unerlässlich.
Ein Einblick in die Welt von Apache Flink
Stellen Sie sich vor, ein Kunde muss 30 Minuten warten, bis Änderungen an seinem Portfolio sichtbar werden, weil die Daten durch verschiedene Systeme laufen – ein Szenario, das in der heutigen Zeit schlichtweg inakzeptabel ist. Apache Flink bietet hierfür die ideale Lösung: ein vielseitiges und leistungsstarkes Framework, das moderne Anforderungen an die Datenstream-Verarbeitung zuverlässig erfüllt.
Was ist Apache Flink?
Apache Flink ist ein Open-Source-Framework und eine verteilte Verarbeitungs-Engine, die speziell für Berechnungen über ungebundene (und gebundene) Datenströme entwickelt wurde mit einem «state». Mit seiner Fähigkeit, in jedem gängigen Cluster-Umfeld zu laufen und Daten nahezu in Echtzeit zu verarbeiten, hat sich Flink in der Welt der Datenverarbeitung einen Namen gemacht.
Die Grundlagen: APIs und Flexibilität
Apache Flink hebt sich durch seine umfassenden und flexiblen API-Optionen von anderen Stream-Processing-Frameworks ab. Diese APIs bieten sowohl Anfängern als auch erfahrenen Entwicklern unterschiedliche Zugänge, um Datenverarbeitungsaufgaben effizient zu lösen.
Flink SQL & Table API
Die SQL und Table API sind deklarative Programmierschnittstellen. Datenverarbeitungsschritte werden bei der Flink SQL API ähnlich wie in herkömmlichen SQL-Abfragen definiert. Die Table API wiederum zeichnet sich aus durch ihre Verfügbarkeit in Java, Scala und Python. Beider dieser APIs fügen sie sich nahtlos in bestehende Entwicklungsumgebungen ein und können mit minimalem Aufwand integriert werden. Diese zwei APIs zeichnen sich durch ihre Benutzerfreundlichkeit und Schnelligkeit aus: Entwickler müssen sich darauf konzentrieren, was getan werden soll, ohne sich um die genaue Implementierung der Datenverarbeitungslogik zu kümmern. Besonders für Anwendungen, die auf einfache Datenmanipulationen oder Filtervorgänge abzielen, ist die SQL oder Table API eine ideale Wahl.
Ein Vorteil der SQL und Table API ist ihre Fähigkeit, auf hohen Abstraktionsleveln zu arbeiten. Das bedeutet, dass Entwickler mit einer einfachen Syntax komplexe Verarbeitungslogiken umsetzen können, was Entwicklungszyklen verkürzt und die Wartung erleichtert. Flink übersetzt diese Abfragen effizient in optimierte Datenverarbeitungspläne, die in verteilten Umgebungen ausgeführt werden können.
Die DataStream API
Für Projekte, die detaillierte Kontrolle über den Verarbeitungsfluss und die spezifische Implementierung erfordern, bietet die DataStream API die nötige Flexibilität. Im Gegensatz zur SQL oder Table API, die eher auf höheren Abstraktionsebenen arbeitet, ermöglicht die DataStream API eine prozedurale Programmierung. Hier können Entwickler genau festlegen, wie die Daten verarbeitet werden sollen, was sich besonders für komplexe, zustandsbehaftete Stream-Verarbeitungen eignet.
Die DataStream API unterstützt eine breite Palette von Funktionen, darunter «windowed» Operationen, die es ermöglichen, Datenströme in festgelegten Zeiträumen zu gruppieren, sowie genau definierte Event-Time-Verarbeitungen, um die korrekte Reihenfolge der Ereignisse sicherzustellen.
Integration und Flexibilität
Ein weiterer Pluspunkt von Flink ist die nahtlose Integration dieser APIs. Entwickler können beispielsweise Flink SQL nutzen, um eine schnelle Abfrage zu starten, und in einem anderen Fall die DataStream API, um tiefergehende, maßgeschneiderte Verarbeitungslogiken einzubauen. Dies eröffnet die Möglichkeit, Anwendungen zu erstellen, die sowohl einfache Datenabfragen als auch hochkomplexe Verarbeitungsprozesse vereinen.
Zusammengefasst bieten die unterschiedlichen APIs in Flink eine Bandbreite an Optionen, die sich für diverse Anforderungen eignen – von schnellen, simplen Abfragen bis hin zu individuell gestalteten Verarbeitungsworkflows. Diese Flexibilität macht Flink zu einem attraktiven Werkzeug für Entwickler und Unternehmen, die mit Echtzeitdatenströmen arbeiten und dabei von einer hohen Anpassungsfähigkeit profitieren möchten.
Komponenten eines Flink-Deployments
Ein Flink-Deployment besteht aus drei Hauptkomponenten:
- Client: Sendet Datenflüsse an den JobManager und kann sich danach trennen (detached mode) oder verbunden bleiben (attached mode). Er ist nicht Teil der Laufzeit, sondern dient nur dem Start.
- JobManager: Koordiniert die Ausführung der Flink-Jobs, plant Aufgaben, verwaltet Checkpoints und übernimmt die Wiederherstellung bei Fehlern. In hochverfügbaren Umgebungen gibt es einen Leader und Standby-JobManager.
- TaskManager: Führt die eigentlichen Verarbeitungsschritte aus, puffert und tauscht Daten aus. Jeder TaskManager hat Task-Slots für parallele Aufgaben. Die Anzahl der Slots bestimmt die Verarbeitungskapazität.

Abbildung 1: Flink Architecture, Source: https://nightlies.apache.org/flink/flink-docs-master/docs/concepts/flink-architecture/
Echtzeit-Verarbeitung und Anwendungsfälle
Flink wird verwendet, um Daten aus unterschiedlichen Quellen wie Kafka, RabbitMQ oder Dateisystemen zu konsumieren, zu transformieren und auszugeben. Die Fähigkeit zur Verarbeitung in Echtzeit und die garantierte exactly-once-Verarbeitungssemantik machen Flink besonders wertvoll für Systeme, die eine hohe Zuverlässigkeit und niedrige Latenzzeiten erfordern. Dazu gehören beispielsweise Anwendungen im Finanzwesen zur Überwachung von Transaktionen oder in der Telekommunikation zur Verarbeitung von Netzwerkdaten.
Checkpointing und State Management
Ein Schlüsselelement für die Ausfallsicherheit in Flink ist der Checkpointing-Mechanismus. Dabei durchlaufen spezielle "checkpoint barriers” den gesamten Datenfluss (siehe Abbildung 2), welche bei der ersten Node, normalerweise ein source connector wie zum Beispiel Kafka, eingefügt werden. Diese Barrieren durchlaufen dann jeden ganzen Datenfluss bis zum Sink, was oft auch wieder Kafka ist. Beim Sink wird auf das Eintreffen jeder Barriere gewartet und darauf wird ein Checkpoint erstellt, wo dann der State persistiert wird. Dies stellt den Zustand der Anwendung zu sicher und garantiert die exactly-once -Verarbeitung. Das State Management in Flink erlaubt es, Informationen zwischen verschiedenen Verarbeitungsphasen zu speichern und abzurufen, was besonders bei komplexen Datenflüssen essenziell ist.

Abbildung 2: Checkpointing, Source: https://nightlies.apache.org/flink/flink-docs-master/docs/concepts/stateful-stream-processing/
Warum Flink und warum nicht?
Die Flexibilität und die hohe Skalierbarkeit machen Flink zu einer attraktiven Option für Entwickler. Im Vergleich zu anderen Technologien wie Kafka Streams bietet Flink mehr Möglichkeiten für komplexe Ereignisverarbeitungen und ein robusteres State Management. Allerdings ist der Einstieg in Flink mitunter anspruchsvoller und erfordert ein tieferes Verständnis der Architektur und Konzepte.
Die verschiedenen Flink APIs lohnen sich jedoch nicht für jeden Anwendungsfall. Für kleinere Anwendungsfälle wie ein einfaches Datenmapping lohnt sich zum Beispiel die Datastream API nicht, da es grösseren Aufwand verursacht, die ganze Applikation aufzusetzen und anschliessend zu deployen im Gegensatz zu einer Kafka Streams Applikation. Flink SQL hingegen ist schnell überfordert mit grösseren Applikationen mit vielen Anforderungen und sollte deshalb für komplexere Lösungen gemieden werden.
Ein Beispiel aus der Praxis
Ein erfolgreiches Anwendungsbeispiel für Apache Flink findet sich bei großen Unternehmen wie Banken, die damit Datenströme aus unterschiedlichen Kafka-Quellen und Dateisystemen verarbeiten und analysieren. Mit der DataStream API können beispielsweise mehrere Datenströme aus Kafka eingelesen, kombiniert und mithilfe verschiedener Joins verarbeitet werden. Anschließend können die Datenfelder neu gemappt, die Ergebnisse mithilfe von Windows dedupliziert und schließlich die deduplizierten Daten als CSV-Dateien exportiert werden. Insbesondere der Übergang vom kontinuierlichen Streaming zu statischen Dateien stellt oft eine große Herausforderung dar – eine Aufgabe, die sich jedoch mit Flink effizient bewältigen lässt.
Fazit
Apache Flink ist mehr als nur eine Datenverarbeitungs-Engine – es ist ein flexibles und mächtiges Framework, das moderne Anforderungen an Echtzeitdatenverarbeitung und State Management erfüllt. Mit der Fähigkeit zur horizontalen Skalierung und einer robusten Ausfallsicherheit stellt Flink eine überzeugende Lösung für Entwickler dar, die anspruchsvolle Datenströme in Echtzeit verarbeiten möchten. Besonders im Bankensektor steigt das Interesse an Flink und anderen Streaming-Lösungen stetig. Für eine vertiefte Diskussion zu den Möglichkeiten des Datenstreamings im Bankenumfeld stehen Ihnen die Expert:innen der Oepfelbaum IT Management AG gerne zur Verfügung.
Kontakt
