Stream Processing - Datenanalyse in Echtzeit

Apache-Lösungen zum Data Streaming

24.10.2018
Von 
Stephan Ewen ist CTO und Mitgründer der Berliner data Artisans.
Die Datennutzung und –analyse in Echtzeit wird für Unternehmen immer wichtiger. Doch welche Data-Stream-Processing-Lösung eignet sich für welchen Zweck? Wir haben vier Apache-Lösungen angeschaut.
Die Batch-orientierte Datenverarbeitung wird den Ansprüchen an eine Echtzeitreaktion nicht gerecht.
Die Batch-orientierte Datenverarbeitung wird den Ansprüchen an eine Echtzeitreaktion nicht gerecht.
Foto: NicoElNino - shutterstock.com

Unmittelbar auf Ereignisse und neue Daten reagieren? Das ist eine Domäne von Data Streaming, Stream Processing und Echtzeit-Datenanalysen. Obwohl aus Daten gewonnene Erkenntnisse generell nützlich sind, nimmt der Wert einiger dieser Insights mit der Zeit rasch ab. Daher gewinnt Real-time-Data-Streaming zunehmend an Bedeutung in der Welt des Daten-Managements. Die Datenstromverarbeitung in Echtzeit kann große Mengen von Ereignissen, also Daten in Bewegung, effizient verarbeiten und liefert Dateneinblicke innerhalb von Millisekunden.

Vom Batch zum Stream

Seit Beginn der Datenverarbeitung wurde auf eine Batch-orientierte Dateninfrastruktur gesetzt, um Daten zu verarbeiten und zu liefern. Davon leiten sich die Begriffe Batch- oder Stapelverarbeitung ab. Letztere erfordert verschiedene Programme zur Analyse der Eingangs- und Ausgangsdaten. Die Daten werden dabei zunächst gespeichert und zu einem späteren Zeitpunkt verarbeitet.

Da heute Echtzeitreaktion und Analyse erforderlich sind, ist Stream-Verarbeitung - oder Datenstromverarbeitung - unerlässlich geworden. Diese Technologie verarbeitet kontinuierlich Daten in Bewegung und gibt Ergebnisse nahezu in Echtzeit aus. Die Stream-Verarbeitung speichert Streaming-Daten fehlertolerant, ist skalierbar für große Rechner-Pools und zeichnet sich durch hohe Zuverlässigkeit aus. Somit lassen sich laufend Ereignisse (etwa Finanztransaktionen, Nutzerverhalten auf Webseiten, Daten von IoT-Sensoren) mit sehr geringer Verzögerung zuverlässig und unmittelbar verarbeiten.

Heute profitieren moderne Unternehmen entscheidend davon, wenn sie in Echtzeit auf Ereignisse reagieren können - also bereits während sie stattfinden. Klassische Datenbanken basieren hingegen auf dem Ansatz, dass Unternehmen durch Geschäftsanalysen (Business Intelligence) gespeicherter Daten Einblicke gewinnen und erst dann Maßnahmen ergreifen. Die Stream-Verarbeitung unterscheidet sich somit von den bisher verwendeten Technologien zur Datenanalyse, da sie Daten direkt zum Zeitpunkt der Generierung verarbeitet.

Open-Source-Technologien für das Stream Processing

Vier verschiedene Open-Source-basierte Technologien dominieren derzeit das Stream-Processing-Segment: Apache Spark, Apache Storm, Apache Flink und Kafka Streams, eine Unterkomponente von Apache Kafka.

Apache Spark

Apache Spark ist eine Open-Source-Engine, die speziell für die Verarbeitung großer Datenmengen und Analysen, sowie eine beschleunigte Analyse auf Hadoop entwickelt wurde. Spark bietet die Möglichkeit, auf Daten aus einer Vielzahl von Quellen zuzugreifen, neben Hadoop Distributed File System (HDFS) sind das auch OpenStack Swift, Amazon S3 und Cassandra. Spark ist als ein Batch-Prozessor konzipiert, der die Stream-Verarbeitung durch Aufteilung des Streams in kleine Mikro-Batches durchführt.

Apache Storm

Echtzeitanalysen, maschinelles Lernen etc sind eine Domäne für Stream-Processing-Maschinen.
Echtzeitanalysen, maschinelles Lernen etc sind eine Domäne für Stream-Processing-Maschinen.
Foto: Ksander - shutterstock.com

Apache Storm ist ein Framework für verteilte Stream-Processing-Berechnung, welches - ebenso wie Spark - als Projekt der Apache Software Foundation weiterentwickelt wird. Storm war eines der ersten Open-Source-Systeme für kontinuierliche Datenstrom-Verarbeitung und arbeitet unter Verwendung vorhandener Warteschlangen- und Datenbanktechnologien, um komplexe Datenströme zu verarbeiten. Zu den wichtigsten Anwendungsfällen zählen Echtzeit-Analytik, maschinelles Lernen und Continous Computing.

Apache Flink

Apache Flink dient als Framework und verteilte Verarbeitungsmaschine für zustandsbehaftete Berechnungen über unbegrenzte und begrenzte Datenströme. Flink wurde entwickelt, um in allen gängigen Cluster-Umgebungen zu laufen, Berechnungen mit In-Memory-Geschwindigkeit und in jeder Größenordnung durchzuführen. In den letzten Jahren hat sich Apache Flink als eine der wettbewerbsfähigsten Stream-Processing-Engines im Open-Source-Umfeld etabliert.

Kafka Streams

Kafka Streams ist eine Client-Bibliothek für die Erstellung von Anwendungen und Mikroservices, bei der die Ein- und Ausgangsdaten in Kafka-Clustern gespeichert werden. Es kombiniert die Einfachheit des Schreibens und Bereitstellens von Standard-Java- und Scala-Anwendungen auf Client-Seite mit den Vorteilen der Server-seitigen Cluster-Technologie von Kafka. Die schlanke Kafka-Streams-Bibliothek unterstützt die Nachrichtenverarbeitung in Mikroservices und die Echtzeit-Ereignisverarbeitung.

Apache Flink greift an - zurecht?

Unter den vier gängigen Stream-Processing-Technologien verzeichnet Apache Flink derzeit die höchste Resonanz. Apache Flink machte zuletzt von sich reden, da es als Basis dazu dient, die zustandsorientierte Stream-Verarbeitung und deren Erweiterung mit schnellen, serialisierbaren ACID-Transaktionen (Atomicity, Consistency, Isolation, Durability) direkt auf Streaming-Daten zu unterstützen. Flink ist Stream-native und robust, was den Zugriff auf Konstrukte bezüglich Zustand und Zeit ermöglicht, fehlertolerant und performant. Auf jede der anderen hier genannten Technologien treffen einige dieser Attribute zu, aber Flink liefert das komplette Paket.

Apache Spark erscheint auf den ersten Blick oder auch in der Proof-of-Concept-Phase für die meisten Stream-Processing-Zwecke als ausreichend. Es erfordert aber in der Praxis oft eine aufwändige Abstimmung von Workload-, Cluster- und Spark-spezifischen Konfigurationen wie Micro-Batch-Intervall und Micro-Batch-Größe. Während bei Spark eine schnelle Batch-Verarbeitung im Fokus stand, ist Flink von Grund auf für die Verarbeitung von kontinuierlichen Datenströmen, also Stream Processing, konzipiert.

Apache Storm unterscheidet zwischen Storm Core und Storm Trident. Während Storm Trident eher mikrobasiert ist, agiert Storm Core eher ereignisnativ wie Apache Flink. Flink ist aber im Kern ereignisgesteuert und unterscheidet nicht zwischen Streaming und Batch. Im Durchsatz ist Flink zudem deutlich performanter als Storm.

Kafka Streams wiederum wurde entwickelt, um Datenströme aus Kafka zu lesen, zu verarbeiten, und wieder in Kafka zu schreiben. Kafka Streams wurde als Bibliothek entwickelt, was im Endergebnis nicht so leistungsfähig, robust und performant ist wie bei Apache Flink.

Apache Flink setzt sich im Data-Stream-Umfeld zunehmend durch und weist die am schnellsten wachsende Akzeptanzrate auf. Große Technologieunternehmen, die aufgrund ihres Geschäftsmodells in Echtzeit arbeiten müssen, wie Alibaba, Uber und Netflix, setzen bereits auf Apache Flink. Andere Unternehmen verwenden Apache Flink, um geschäftskritische Anwendungen wie Echtzeitanalysen, maschinelles Lernen, Such- und Inhalts-Ranking und Echtzeit-Betrugserkennung zu betreiben. Weitere Anwendungsfälle, speziell für den Finanzdienstleistungssektor, sind Stammdaten-Management, Kapitalrisiko-Management, sowie Echtzeit-Empfehlungen im eCommerce.

Data Streaming verzeichnet hohe Wachstumsraten

Wie wird sich Stream Processing weiterentwickeln? Bis zum Jahr 2025 soll der globale Markt für Streaming-Analytik, so der Global Streaming Analytics Market Report 2018, ein Volumen von knapp 48 Milliarden Dollar erreichen, bei einer kontinuierlichen jährlichen Wachstumsrate von 35 Prozent zwischen 2017 und 2025. Die Wachstumsprognosen werden damit begründet, dass Unternehmen branchenübergreifend von einem produktzentrischen Geschäftsmodell zu einem kunden- und serviceorientierten Ansatz übergehen. Da Unternehmen ihre Streaming-Datenarchitektur ausbauen, wollen sie die Anwendungsfälle erweitern und eine größere Bandbreite von Echtzeitanwendungen einsetzen. Es ist davon auszugehen, dass die Datenstromverarbeitung mit zunehmender technologischer Reife ein größeres Publikum erreicht und mehr Menschen im Alltag mit Stream-Processing-Maschinen arbeiten.