Heute schon gestreamt?

Stream Processing mit Apache Flink: Worauf es für Entwickler jetzt ankommt

Dr. Stephan Ewen

© Shutterstock / Sashkin

Data Streaming oder Stream Processing ist die unmittelbare Verarbeitung von Daten in Bewegung und revolutioniert die Datenanalyse. Was bedeutet es, den Einsatz von Stream Processing für die Entwicklung einer neuen Anwendung oder für bestehende Anwendungen zu berücksichtigen?

Die meisten Daten entstehen heute als kontinuierliche Streams: Ereignisse, die von IoT-Sensoren erfasst werden, Benutzeraktivitäten auf einer Website, Finanztransaktionen etc. Vor der Stream-Verarbeitung wurden diese Daten oft in einer Datenbank, einem Dateisystem oder anderen Formen der Massenspeicherung abgelegt. Anwendungen wie beispielsweise für Business Intelligence würden bei Bedarf bestimmte Daten abrufen und Berechnungen durchführen. Stream Processing dreht dieses Paradigma um: Die Anwendungslogik, die Analytik und die Abfragen sind kontinuierlich vorhanden und die Daten fließen kontinuierlich durch sie hindurch.

Die Stream-Verarbeitung ist definiert durch die Verarbeitung von Daten in Bewegung, d.h. direkt bei ihrer Generierung oder Bereitstellung. Die Analyse von Datenströmen im großen Stil war bisher jedoch schwierig. Stream Processing, also die Stream-Verarbeitung, hat sich mittlerweile weiterentwickelt, um eine Vielzahl von analytischen und transaktionalen Anwendungen zu unterstützen. Mit zunehmender Reife der Technologie kommen immer mehr Anwendungsfälle hinzu.

Während in der Anfangszeit Stream-Prozessoren zur Berechnung ungefährer aggregierter Werte verwendet wurden, lassen sich heute bereits präzise Analyseapplikationen betreiben und komplexe Geschäftslogik in Hochdurchsatz-Streams bewerten. Einer der wichtigsten Aspekte der Stream-Verarbeitung ist die Zustandsbehandlung, also die „Erinnerung“ an vergangene Eingaben und deren Verwendung, um die Verarbeitung zukünftiger Eingaben zu beeinflussen.

Beim Empfangen eines Ereignisses aus dem Stream reagiert eine Stream-Processing-Anwendung auf dieses Ereignis: Sie kann eine Aktion auslösen, ein Aggregat oder eine Statistik aktualisieren oder sich dieses Ereignis als zukünftige Referenz „merken“. Streaming-Berechnungen können auch mehrere Datenströme gemeinsam verarbeiten, und jede Berechnung über den Ereignisdatenstrom kann andere Ereignisdatenströme erzeugen.

Die Systeme, die die Datenströme empfangen und senden und die Anwendungs- oder Analyselogik ausführen, werden als Stream-Prozessoren bezeichnet. Die Hauptaufgabe eines Stream-Prozessors besteht darin, sicherzustellen, dass der Datenfluss und die Berechnungsskalen effizient und fehlertolerant sind.

Blockchain Whitepaper 2018

Free: Blockchain Technology Whitepaper

If building a blockchain from scratch is beyond your current scope, the blockchain technology whitepaper is worth a look. Experts from the field share their know-how, tips and tricks, development advice, and strategy for becoming a blockchain master.

Apache Flink verarbeitet Datenströme mit hohem Durchsatz bei geringer Latenzzeit

Apache Flink ist ein Stream-Processing-Framework aus dem Open-Source-Umfeld. Entwickelt wurde Flink als Distributed-Data-Prozessor, um zustandsorientierte Berechnungen über Datenströme auszuführen. Flink ist extrem genau in der Datenaufnahme, ist schnell wieder einsatzfähig nach Ausfällen, während der bisherige Zustand erhalten bleibt, und ist hochgradig skalierbar.

Die Runtime von Apache Flink ist optimiert für die Verarbeitung unbegrenzter Datenströme sowie begrenzter Datensätze beliebiger Größe. Flink ist in der Lage, Berechnungen auf Tausende von Kernen zu skalieren und damit Datenströme mit hohem Durchsatz bei geringer Latenzzeit zu verarbeiten. Flink-Anwendungen können für Ressourcenmanager wie Hadoop YARN, Apache Mesos und Kubernetes oder für eigenständige Flink-Cluster bereitgestellt werden. Fehlertoleranz ist ein sehr wichtiger Aspekt von Flink, wie bei jedem verteilten System. Flink kann in einem hochverfügbaren Modus ohne Single Point of Failure arbeiten und zustandsbehaftete Anwendungen aus Ausfällen mit genau einmaligen Zustandskonsistenzgarantien wiederherstellen. Darüber hinaus bietet Flink viele Funktionen, um die betrieblichen Aspekte der laufenden Stream-Processing-Anwendungen in der Produktion zu erleichtern. Der Datenprozessor lässt sich problemlos in die bestehende Protokollierungs- und Metrikinfrastruktur integrieren und bietet ein REST API zum Senden und Steuern laufender Anwendungen.

Flink bietet mehrere APIs mit unterschiedlichen Kompromissen für Ausdruckskraft und Prägnanz bei der Implementierung von Stream-Processing-Anwendungen. Das DataStream API ist das Basis-API und bietet bekannte Primitive, die in anderen datenparallelen Verarbeitungs-Frameworks wie map, flatMap, split und union zu finden sind. Diese Primitive werden durch gängige Stream-Verarbeitungsoperationen erweitert, wie z.B. Windowed-Aggregationen, Joins und einen Operator für asynchrone Anfragen an externe Datenspeicher.

Die Prozessfunktionen (ProcessFunctions) von Flink sind Low-Level-Schnittstellen, die eine präzise Kontrolle über Zustand und Zeit ermöglichen. So kann beispielsweise eine Prozessfunktion implementiert werden, um jedes empfangene Ereignis in seinem Zustand zu speichern und einen Timer für einen zukünftigen Zeitpunkt zu registrieren. Später, wenn der Timer ausgelöst wird, kann die Funktion das Ereignis und möglicherweise andere Ereignisse aus seinem Zustand abrufen, um eine Berechnung durchzuführen und ein Ergebnis auszugeben. Diese feinkörnige Steuerung von Zustand und Zeit ermöglicht ein breites Anwendungsspektrum.

Schließlich bieten die SQL-Unterstützung und das Tabellen-API von Flink deklarative Schnittstellen zur Spezifikation einheitlicher Abfragen gegen Streaming- und Batch-Quellen. Dies bedeutet, dass die gleiche Abfrage mit der gleichen Semantik auf einem begrenzten Datensatz und einem Strom von Echtzeitereignissen ausgeführt werden kann. Sowohl Prozessfunktionen als auch SQL-Abfragen können nahtlos in das DataStream API integriert werden, was dem Entwickler maximale Flexibilität bei der Auswahl des richtigen APIs bietet.

Zusätzlich zu den Kern-APIs von Flink verfügt Flink über domänenspezifische Bibliotheken für die Grafikverarbeitung und Analytik sowie für die komplexe Ereignisverarbeitung (Complex Event Processing, CEP). Die CEP-Bibliothek von Flink bietet eine API zur Definition und Auswertung von Mustern auf Ereignisströmen. Dieses Muster-API kann verwendet werden, um Prozesse zu überwachen oder Alarme bei unerwarteten Ereignisabläufen auszulösen.

Streaming-Anwendungen laufen nie als isolierte Dienste. Stattdessen müssen sie Ereignisströme aufnehmen und typischerweise auch aussenden. Apache Flink bietet eine umfangreiche Bibliothek von Konnektoren für die am häufigsten verwendeten Stream- und Speichersysteme. Anwendungen können Streams für Apache Kafka und Amazon Kinesis aufnehmen oder veröffentlichen. Streams können auch durch das Lesen von Dateien aufgenommen werden, wie sie in Verzeichnissen erscheinen, oder durch das Schreiben von Ereignissen in Bucket-Dateien persistiert werden. Apache Flink unterstützt eine Reihe verschiedener Dateisysteme, darunter HDFS, S3 und NFS. Darüber hinaus können Flink-Anwendungen Daten über JDBC „versenken“, d.h. in eine relationale Datenbank exportieren, oder in Apache Cassandra und Elasticsearch einfügen.

Mittels Flink laufen geschäftskritische Anwendungen in vielen Unternehmen auf der ganzen Welt und in vielen Branchen wie E-Commerce, Telekommunikation, Finanzdienstleistungen, Gaming und Entertainment. Benutzer melden Anwendungen, die auf Tausenden von Kernen laufen, Terabyte von Zustandsdaten pflegen und Milliarden von Ereignissen pro Tag verarbeiten. Die Open-Source-Community, die Flink entwickelt, wächst kontinuierlich und gewinnt neue Nutzer.

Worauf es für Entwickler jetzt ankommt

Was bedeutet es, den Einsatz von Stream Processing für die Entwicklung einer neuen Anwendung oder für bestehende Anwendungen zu berücksichtigen? Die Entwicklung neuer Anwendungen oder die Umstellung bestehender Anwendungen auf eine Stream-Processing-Datenarchitektur kann zu Beginn als eine gewaltige Aufgabe erscheinen. Wenn sie gut geplant und entsprechend ausgeführt wird, kann daraus ein reibungsloser Prozess hervorgehen, der sich letztendlich vorteilhaft auf die Arbeitsweise eines Entwicklerteams auswirken wird.

Insbesondere vor jeder Änderung bestehender Anwendungen, die in eine Stream-Processing-Infrastruktur übergehen, müssen sorgfältige Planungs- und Ausführungsschritte durchgeführt werden. Folgende Schritte sind Teil dieses Prozesses:

  1. Entscheidung über den zu verwendenden Technologie-Stack: Das gesamte Entwicklerteam sollte in den Prozess eingebunden werden. Wenn ein bestimmtes Maß an Autonomie und Experimentieren zugelassen wird, dürfte auch die Beteiligung der Entwickler und die Akzeptanz für den neuen Technologie-Stack deutlich höher sein.
  2. Teamtraining und Entwicklung von Fähigkeiten: Zusätzliche Schulungen können erforderlich sein, wenn es darum geht, eine bestehende Anwendung in eine Stream-Processing-Infrastruktur zu verschieben. Es gilt sicherzustellen, dass die Teammitglieder über Trainingsressourcen, verfügbare Dokumentationen, relevante Veranstaltungen und Trainingsprogramme informiert werden.
  3. Datenaufbereitung: Die Daten müssen für die Übertragung in eine Streaming-Infrastruktur vorbereitet sein. Daten an einer Stream-Processing-Schnittstelle sind nicht im Ruhezustand („at-rest“), sondern in Bewegung („in-flight“). Daher müssen alle Datenquellen entsprechend konfiguriert sein, um eine maximale Nutzung der Leistungsfähigkeit der Stream-Verarbeitung durch die vorgesehenen Anwendungen zu gewährleisten.
  4. POC (Proof-of-Concept): Bei bestehenden Anwendungen sollte mit einer POC-Phase (Proof-of-Concept) gestartet werden, bevor eine Anwendung auf die vollständige Stream-Verarbeitung umgestellt wird. So lassen sich frühzeitig Engpässe oder Probleme aufdecken, um diese in einer späteren Produktionsphase effizient angehen zu können.

Umstellung auf Stream Processing bedeutet technischen, kulturellen und fachlichen Wandel

Der Übergang zu einer Datenarchitektur für die Verarbeitung von Ereignisströmen ist ein Prozess, der über technische und systemrelevante Änderungen hinausgeht. Entwickler-Teamleiter und Engineering-Manager müssen sicherstellen, dass das „Event Stream Processing“ in die Denkweise ihres Unternehmens eingebettet ist. Die Umstellung auf Stream Processing ist ein ebenso technischer wie kultureller und fachlicher Prozess.

Entwickler müssen in einem neuen Umgang mit Daten geschult werden. So werden Daten in einer Stream-Processing-Anwendung fortlaufend produziert und müssen kontinuierlich verarbeitet werden. Darüber hinaus gilt es für Entwickler, ihre Denkweise umzustellen – von einem „Keeping the Data Store“ auf „Quick Response to Events“. Bei der Behebung von Systemfehlern oder Bugfixes ist ebenfalls ein Umdenken erforderlich. Anstelle eines Datenspeichers müssen Entwickler das Protokoll der Ereignisse durchgehen, um die Ursache für einen solchen Fehler zu finden. Vor allem sollten sie in der Lage sein, in einer neuen Art und Weise auf Daten zu reagieren, da die Dateninfrastruktur nun zum zentralen Nervensystem des Unternehmens wird. Genau dies ermöglicht Echtzeitreaktionen, Analysen, Einblicke und personalisierte Erfahrungen und verbesserte Services in Echtzeit für den Kundenstamm des Unternehmens, was letztlich das Ziel von Data Streaming ist.

Verwandte Themen:

Geschrieben von
Dr. Stephan Ewen
Dr. Stephan Ewen
Dr. Stephan Ewen ist CTO und Mitbegründer von data Artisans.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: