Kapitel 1. Warum Apache Flink?

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Wir verstehen am besten, wenn unsere Schlussfolgerungen mit den Beweisen übereinstimmen, und das ist am effektivsten, wenn unsere Analysen mit dem Leben übereinstimmen.

Viele der Systeme, die wir verstehen müssen - fahrende Autos, die GPS-Signale aussenden, Finanztransaktionen, der Austausch von Signalen zwischen Mobilfunkmasten und Menschen, die mit ihren Smartphones beschäftigt sind, Internetverkehr, Maschinenprotokolle, Messungen von Industriesensoren und tragbaren Geräten - laufen alle in einem kontinuierlichen Fluss von Ereignissen ab. Wenn du in der Lage bist, Streaming-Daten in großem Maßstab effizient zu analysieren, bist du in einer viel besseren Position, um diese Systeme zu verstehen, und zwar zeitnah. Kurz gesagt: Streaming-Daten passen besser zu unserer Lebensweise.

Es ist daher naheliegend, Daten als Strom von Ereignissen zu sammeln und als Strom zu verarbeiten, aber bisher war das nicht der Standardansatz. Streaming ist nicht völlig neu, aber es wurde als ein spezieller und oft schwieriger Ansatz betrachtet. Stattdessen wurde in der betrieblichen Dateninfrastruktur in der Regel davon ausgegangen, dass Daten als endliche Mengen mit Anfang und Ende organisiert sind, die irgendwann vollständig werden. Dies wurde vor allem deshalb so gehandhabt, weil diese Annahme die Entwicklung von Systemen zur Datenspeicherung und -verarbeitung vereinfacht, aber in vielerlei Hinsicht passt sie nicht zur Realität.

Die Verarbeitung von Daten in Form von Datenströmen ist also attraktiv, aber es war schon immer schwierig, dies gut zu machen, und die Herausforderungen sind jetzt noch größer, da die Menschen begonnen haben, mit Daten in sehr großem Maßstab in einer Vielzahl von Sektoren zu arbeiten. Es liegt in der Physik begründet, dass bei großen verteilten Systemen exakte Konsistenz und sichere Kenntnis der Reihenfolge von Ereignissen nur begrenzt möglich sind. Aber mit der Weiterentwicklung unserer Methoden und Technologien können wir uns bemühen, diese Beschränkungen in dem Maße unschädlich zu machen, wie sie unsere geschäftlichen und betrieblichen Ziele beeinflussen.

Hier kommt Apache Flink ins Spiel. Flink ist eine Open-Source-Software, die von einer offenen Community entwickelt wurde. Sie bietet Stream Processing für große Datenmengen und ermöglicht es dir, Batch-Analysen mit einer einzigen Technologie durchzuführen.

Es wurde entwickelt, um bestimmte Kompromisse zu überwinden, die die Effektivität oder Benutzerfreundlichkeit anderer Ansätze zur Verarbeitung von Streaming-Daten eingeschränkt haben.

In diesem Buch werden wir die potenziellen Vorteile der Arbeit mit Datenströmen untersuchen, damit du herausfinden kannst, ob ein Stream-basierter Ansatz für deine speziellen Geschäftsziele geeignet ist. Einige der Quellen von Streaming-Daten und einige der Situationen, in denen dieser Ansatz nützlich ist, werden dich vielleicht überraschen. Außerdem hilft dir das Buch dabei, die Technologie von Flink zu verstehen und herauszufinden, wie sie die Herausforderungen der Stream-Verarbeitung meistert.

In diesem Kapitel gehen wir der Frage nach, was die Menschen mit der Analyse von Streaming-Daten erreichen wollen und welche Herausforderungen dies in großem Maßstab mit sich bringt. Außerdem stellen wir dir Flink vor und werfen einen ersten Blick darauf, wie es genutzt wird, auch in der Produktion.

Die Folgen von schlechtem Streaming

Wer muss mit Streaming-Daten arbeiten? Zu den ersten Beispielen, die mir einfallen, gehören Sensormessungen oder Finanztransaktionen, und das sind sicherlich Situationen, in denen die Stream-Verarbeitung nützlich ist. Aber es gibt noch weitaus mehr Quellen für Streaming-Daten: Clickstream-Daten, die das Nutzerverhalten auf Websites widerspiegeln, und Maschinenprotokolle für dein eigenes Rechenzentrum sind zwei bekannte Beispiele. Tatsächlich sind Streaming-Datenquellen im Grunde genommen allgegenwärtig - nur gab es bisher in der Regel keine Verbindung zwischen Daten aus kontinuierlichen Ereignissen und der Nutzung dieser Daten in Form von Batch-Verarbeitung. Das ändert sich jetzt mit der Entwicklung neuer Technologien zur Verarbeitung großer Streaming-Daten.

Doch wenn es in der Vergangenheit eine Herausforderung war, mit Streaming-Daten in sehr großem Maßstab zu arbeiten, warum sollte man sich dann jetzt die Mühe machen, es zu tun, und zwar gut? Bevor wir uns ansehen, was sich geändert hat - die neue Architektur und die neuen Technologien, die die Arbeit mit Streaming-Daten unterstützen -, wollen wir uns zunächst die Konsequenzen ansehen, die entstehen, wenn das Streaming nicht gut funktioniert.

Einzelhandel und Marketing

In der modernen Einzelhandelswelt werden Verkäufe oft durch Klicks auf einer Website dargestellt, und diese Daten können in großem Umfang, kontinuierlich, aber nicht gleichmäßig anfallen. Es kann schwierig sein, diese Daten mit älteren Techniken in großem Umfang zu verarbeiten. Selbst der Aufbau von Batch-Systemen zur Verarbeitung dieser Datenströme ist eine Herausforderung - das Ergebnis kann ein enormer und komplizierter Workflow sein. Das Ergebnis können verloren gegangene Daten, Verzögerungen oder falsch zusammengestellte Ergebnisse sein. Wie könnte sich das auf das Geschäft auswirken?

Stell dir vor, du berichtest deinem Geschäftsführer über die Verkaufszahlen des letzten Quartals. Du willst nicht später widerrufen müssen, weil du die Ergebnisse auf der Grundlage ungenauer Zahlen zu hoch angegeben hast. Wenn du mit den Clickstream-Daten nicht richtig umgehst, kann es passieren, dass du den Website-Verkehr nicht richtig zählst - und das wiederum bedeutet, dass du die Anzeigenschaltung und die Leistungszahlen nicht richtig abrechnest.

Die Passagierdienste der Fluggesellschaften stehen vor einer ähnlichen Herausforderung: Sie müssen riesige Datenmengen aus vielen Quellen verarbeiten, die schnell und genau koordiniert werden müssen. Beim Einchecken der Passagiere müssen die Daten zum Beispiel mit den Reservierungsinformationen, der Gepäckabfertigung und dem Flugstatus abgeglichen werden, ebenso wie mit der Rechnungsstellung. In dieser Größenordnung ist es nicht einfach, Schritt zu halten, wenn man nicht über eine robuste Technologie zur Verarbeitung von Datenströmen verfügt. Die jüngsten Ausfälle bei drei der vier größten Fluggesellschaften lassen sich direkt auf Probleme bei der Verarbeitung von Echtzeitdaten in großem Umfang zurückführen.

Natürlich wurden viele damit zusammenhängende Probleme - wie z.B. die Wichtigkeit, Hotelzimmer oder Konzertkarten nicht doppelt zu buchen - traditionell mit Datenbanken gelöst, aber oft mit beträchtlichen Kosten und Aufwand. Die Kosten können in die Höhe schießen, wenn der Umfang der Daten wächst und die Antwortzeiten der Datenbanken für manche Situationen zu langsam sind. Die Entwicklungsgeschwindigkeit kann unter mangelnder Flexibilität leiden und in großen, komplexen oder sich entwickelnden Systemen ins Stocken geraten. Im Grunde genommen ist es schwierig, so zu reagieren, dass du mit dem Leben Schritt halten kannst und gleichzeitig die Konsistenz und Erschwinglichkeit in großen Systemen aufrechterhalten kannst.

Glücklicherweise können moderne Stream-Prozessoren diese Probleme oft auf neue Weise lösen, indem sie in großem Maßstab, zeitnah und kostengünstig arbeiten. Stream Processing lädt auch dazu ein, neue Dinge zu erforschen, wie z. B. die Entwicklung von Echtzeit-Empfehlungssystemen, die darauf reagieren, was die Leute gerade kaufen, um dann zu entscheiden, was sie wahrscheinlich noch wollen. Es geht nicht darum, dass Stream-Prozessoren Datenbanken ersetzen - im Gegenteil, sie können in bestimmten Situationen Aufgaben übernehmen, für die Datenbanken nicht gut geeignet sind. Dadurch werden Datenbanken auch für lokal spezifische Sichten auf den aktuellen Stand des Geschäfts genutzt. Diese Verschiebung wird in unserer Diskussion über die Stream-First-Architektur in Kapitel 2 genauer erläutert.

Das Internet der Dinge

Das Internet der Dinge (IoT) ist ein Bereich, in dem das Streaming von Daten weit verbreitet ist und in dem eine Datenübermittlung und -verarbeitung mit geringer Latenz sowie die Genauigkeit der Datenanalyse oft entscheidend sind. Sensoren in verschiedenen Geräten nehmen häufig Messungen vor und leiten diese an Rechenzentren weiter, wo Echtzeit- oder echtzeitnahe Verarbeitungsanwendungen Dashboards aktualisieren, Machine-Learning-Modelle ausführen, Warnungen ausgeben und Feedback für viele verschiedene Dienste liefern.

Die Verkehrsbranche ist ein weiteres Beispiel dafür, wie wichtig es ist, Streaming gut zu machen. Moderne Zugsysteme zum Beispiel basieren auf Sensordaten, die von den Gleisen an die Züge und von den Zügen an die Sensoren entlang der Strecke übermittelt werden. Gemessen werden u. a. die Geschwindigkeit und der Standort des Zuges sowie Informationen aus der Umgebung über den Zustand der Gleise. Wenn diese Datenströme nicht korrekt verarbeitet werden, können Anpassungen und Warnungen nicht rechtzeitig erfolgen, um sich auf gefährliche Bedingungen einzustellen und Unfälle zu vermeiden.

Ein weiteres Beispiel aus der Verkehrsbranche sind "intelligente" oder vernetzte Autos, die Daten über Mobilfunknetze an die Hersteller weitergeben. In einigen Ländern (z. B. in Skandinavien, Frankreich, Großbritannien und seit kurzem auch in den USA) liefern vernetzte Autos sogar Informationen an Versicherungsgesellschaften und senden im Falle von Rennwagen Informationen über eine Funkverbindung zur Analyse an die Box zurück. Einige Smartphone-Anwendungen liefern auch Echtzeit-Verkehrsinformationen, die von Millionen von Fahrern genutzt werden, wie in Abbildung 1-1 dargestellt.

The time-value of data comes into consideration in many situations including IoT data used in transportation. Real-time traffic information shared by millions of drivers relies on reasonably accurate analysis of streaming data that is processed in a timely manner. (Image credit © 2016 Friedman)
Abbildung 1-1. Der Zeitwert von Daten spielt in vielen Situationen eine Rolle, auch bei IoT-Daten im Verkehrswesen. Echtzeit-Verkehrsinformationen, die von Millionen von Autofahrern genutzt werden, beruhen auf einer angemessen genauen Analyse von Streaming-Daten, die zeitnah verarbeitet werden. (Bildnachweis © 2016 Friedman)

Das IoT hat auch Auswirkungen auf die Versorgungsunternehmen. Versorgungsunternehmen beginnen, intelligente Zähler einzuführen, die regelmäßig (z. B. alle 15 Minuten) Updates über den Verbrauch senden und die alten Zähler ersetzen, die einmal im Monat manuell abgelesen werden. In einigen Fällen experimentieren die Versorgungsunternehmen mit Messungen alle 30 Sekunden. Dieser Wechsel zu intelligenten Zählern führt zu einer riesigen Menge an Datenströmen, und die potenziellen Vorteile sind groß. Zu den Vorteilen gehört die Möglichkeit, Modelle des maschinellen Lernens einzusetzen, um Anomalien im Verbrauch zu erkennen, die durch Geräteprobleme oder Energiediebstahl verursacht werden. Ohne effiziente Methoden zur Bereitstellung und genauen Verarbeitung von Streaming-Daten mit hohem Durchsatz und sehr geringen Latenzzeiten können diese neuen Ziele nicht erreicht werden.

Auch andere IoT-Projekte leiden darunter, wenn das Streaming nicht gut gemacht ist. Große Anlagen wie Turbinen in einem Windpark, Produktionsanlagen oder Pumpen in einem Bohrbetrieb - sie alle sind auf die Analyse von Sensormessungen angewiesen, um Fehlfunktionen zu melden. Wenn die Stream-Analyse in diesen Fällen nicht gut und mit einer angemessenen Latenzzeit durchgeführt wird, kann das kostspielige oder sogar katastrophale Folgen haben.

Telecom

Die Telekommunikationsbranche ist ein Spezialfall von IoT-Daten, da hier Streaming-Ereignisdaten für eine Vielzahl von Zwecken in geografisch verteilten Regionen genutzt werden. Wenn ein Telekommunikationsunternehmen Streaming-Daten nicht gut verarbeiten kann, schlägt es fehl, wenn es Nutzungsspitzen präventiv auf andere Mobilfunkmasten umleitet oder schnell auf Ausfälle reagiert. Die Erkennung von Anomalien bei der Verarbeitung von Streaming-Daten ist für diese Branche wichtig - in diesem Fall, um unterbrochene Anrufe oder Fehlfunktionen der Geräte zu erkennen.

Banken- und Finanzsektor

Die potenziellen Probleme, die durch eine unzureichende Verarbeitung von Datenströmen entstehen können, sind im Bank- und Finanzwesen besonders offensichtlich. Eine Privatkundenbank möchte nicht, dass sich Kundentransaktionen verzögern oder falsch gezählt werden und somit zu falschen Kontoständen führen. Der altmodische Begriff "Bankers' Hours" bezog sich auf die Notwendigkeit, eine Bank am frühen Nachmittag zu schließen, um die Aktivitäten einzufrieren, damit vor dem nächsten Geschäftstag eine genaue Abrechnung vorgenommen werden konnte. Diese Art von Batch-Geschäft ist längst überholt. Transaktionen und Berichte müssen heute schnell und genau erfolgen; einige neue Banken bieten sogar sofortige Push-Benachrichtigungen in Echtzeit und den Zugriff auf das mobile Banking jederzeit und überall an. In einer globalen Wirtschaft wird es immer wichtiger, die Anforderungen eines 24-Stunden-Geschäftszyklus erfüllen zu können.

Was passiert, wenn ein Finanzinstitut nicht über Anwendungen verfügt, die anomales Verhalten in den Nutzeraktivitätsdaten mit sensibler Erkennung in Echtzeit erkennen können? Die Erkennung von Betrug bei Kreditkartentransaktionen erfordert eine zeitnahe Überwachung und Reaktion. Die Fähigkeit, ungewöhnliche Anmeldemuster zu erkennen, die auf einen Online-Phishing-Angriff hindeuten, kann zu enormen Einsparungen führen, da Probleme rechtzeitig erkannt werden, um den Schaden zu begrenzen.

Hinweis

Da Daten in vielen Situationen einen hohen Zeitwert haben, ist die Verarbeitung von Datenströmen mit geringer Latenz oder in Echtzeit sehr wünschenswert, solange sie auch genau und effizient ist.

Ziele für die Verarbeitung kontinuierlicher Ereignisdaten

Die Fähigkeit, Daten mit sehr geringer Latenz zu verarbeiten, ist nicht der einzige Vorteil einer effektiven Stream-Verarbeitung. Auf der Wunschliste für die Stream-Verarbeitung steht nicht nur ein hoher Durchsatz bei geringer Latenz, sondern das Verarbeitungssystem muss auch mit Unterbrechungen umgehen können. Eine gute Streaming-Technologie sollte in der Lage sein, nach einem Ausfall so neu zu starten, dass sie genaue Ergebnisse liefert; mit anderen Worten, es ist von Vorteil, wenn sie fehlertolerant ist und eine Exact-once-Garantie bietet.

Außerdem sollte die Methode, mit der dieses Maß an Fehlertoleranz erreicht werden soll, möglichst keine hohen Kosten verursachen, wenn es keine Ausfälle gibt. Es ist sinnvoll, Sitzungen anhand des Zeitpunkts des Auftretens von Ereignissen und nicht anhand eines willkürlichen Verarbeitungsintervalls zu erkennen und die Ereignisse in der richtigen Reihenfolge zu verfolgen. Es ist auch wichtig, dass ein solches System für Entwickler/innen einfach zu bedienen ist, sowohl beim Schreiben von Code als auch beim Beheben von Fehlern, und es sollte leicht zu warten sein. Wichtig ist auch, dass diese Systeme korrekte Ergebnisse in Bezug auf die Zeit, in der die Ereignisse in der realen Welt eintreten, liefern - zum Beispiel, dass sie in der Lage sind, Ereignisströme zu verarbeiten, die nicht in der richtigen Reihenfolge eintreffen (eine unglückliche Realität), und dass sie in der Lage sind, Ströme deterministisch zu ersetzen (z. B. für Auditing- oder Debugging-Zwecke).

Entwicklung der Stream Processing Technologien

Die Trennung zwischen kontinuierlicher Datenproduktion und Datenkonsum in endlichen Batches erleichtert zwar die Arbeit der Systementwickler, hat aber die Komplexität der Verwaltung dieser Trennung auf die Nutzer der Systeme verlagert: die Anwendungsentwickler und DevOps-Teams, die diese Infrastruktur nutzen und verwalten müssen.

Um diese Trennung zu bewältigen, haben einige Nutzer ihre eigenen Stream-Processing-Systeme entwickelt. Ein Pionier der Stream-Verarbeitung im Open-Source-Bereich ist das Apache Storm-Projekt, das von Nathan Marz und einem Team des Start-ups BackType (später von Twitter übernommen) ins Leben gerufen wurde, bevor es in die Apache Software Foundation aufgenommen wurde. Storm ermöglichte die Verarbeitung von Datenströmen mit sehr geringer Latenz, aber diese Echtzeitverarbeitung war mit Kompromissen verbunden: Ein hoher Durchsatz war schwer zu erreichen, und Storm bot nicht den Grad an Korrektheit, der oft benötigt wird. Mit anderen Worten: Es gab keine "Exact-once"-Garantie für die Aufrechterhaltung eines korrekten Zustands, und selbst die Garantien, die Storm bieten konnte, waren mit einem hohen Overhead verbunden.

Hinweis

Um Werte zu berechnen, die von mehreren Streaming-Ereignissen abhängen, ist es notwendig, Daten von einem Ereignis zum nächsten zu speichern. Diese gespeicherten Daten werden als Status der Berechnung bezeichnet. Eine genaue Handhabung des Zustands ist für die Konsistenz der Berechnungen unerlässlich. Die Fähigkeit, den Zustand nach einem Ausfall oder einer Unterbrechung genau zu aktualisieren, ist ein Schlüssel zur Fehlertoleranz.

Es ist schwierig, eine fehlertolerante Stream-Verarbeitung mit hohem Durchsatz und sehr geringer Latenz aufrechtzuerhalten, aber die Notwendigkeit, einen genauen Zustand zu garantieren, führte zu einem cleveren Kompromiss: Was wäre, wenn der Datenstrom aus kontinuierlichen Ereignissen in eine Reihe kleiner, atomarer Batch-Aufträge aufgeteilt würde? Wenn die Batches klein genug sind - so genannte "Micro-Batches" - kann die Berechnung einem echten Streaming nahekommen. Die Latenzzeit würde nicht ganz Echtzeit erreichen, aber Latenzen von einigen Sekunden oder sogar Subsekunden für sehr einfache Anwendungen wären möglich. Diesen Ansatz verfolgt Apache Spark Streaming, das auf der Spark-Batch-Engine läuft.

Noch wichtiger ist, dass du mit Micro-Batching die Konsistenz des Zustands genau einmal garantieren kannst. Wenn ein Micro-Batch-Auftrag fehlschlägt, kann er erneut ausgeführt werden. Das ist viel einfacher als bei einem kontinuierlichen Stream-Processing-Ansatz. Eine Erweiterung von Storm, Storm Trident genannt, wendet Micro-Batch-Berechnungen auf den zugrunde liegenden Stream-Prozessor an, um Exakt-einmal-Garantien zu bieten, allerdings zu einem erheblichen Preis für die Latenz.

Die Simulation von Streaming mit periodischen Batch-Aufträgen führt jedoch zu sehr anfälligen Pipelines, die DevOps und Anwendungsentwicklung vermischen. Die Zeit, die ein periodischer Batch-Job braucht, um fertig zu werden, ist eng mit dem Zeitpunkt des Eintreffens der Daten gekoppelt, und jede Verzögerung kann zu inkonsistenten (d.h. falschen) Ergebnissen führen. Das grundlegende Problem bei diesem Ansatz ist, dass die Zeit nur implizit von dem Teil des Systems verwaltet wird, der die kleinen Aufträge erstellt. Frameworks wie Spark Streaming mildern die Anfälligkeit zwar etwas ab, aber nicht vollständig. Die Empfindlichkeit gegenüber der Zeit im Vergleich zu Batches führt immer noch zu schlechten Latenzzeiten und einer Benutzererfahrung, bei der man im Anwendungscode viel über die Leistung nachdenken muss.

Diese Kompromisse zwischen den gewünschten Fähigkeiten haben dazu geführt, dass immer wieder versucht wird, bestehende Prozessoren zu verbessern (z. B. die Entwicklung von Storm Trident, um einige der Einschränkungen von Storm zu überwinden). Wenn bestehende Prozessoren nicht ausreichen, liegt es an den Anwendungsentwicklern, die daraus resultierenden Probleme zu lösen. Ein Beispiel dafür ist das Micro-Batching, das keine gute Verbindung zwischen dem natürlichen Auftreten von Sessions in Ereignisdaten und der Notwendigkeit des Prozessors, Daten nur als Vielfaches der Batch-Zeit (Erholungsintervall) zu fenstern, herstellt. Mit weniger Flexibilität und Ausdruckskraft wird die Entwicklungszeit langsamer und die Abläufe erfordern mehr Aufwand, um sie richtig zu pflegen.

Das bringt uns zu Apache Flink, einem Datenprozessor, der viele dieser Kompromisse beseitigt und viele der gewünschten Eigenschaften vereint, die für eine effiziente Verarbeitung von Daten aus kontinuierlichen Ereignissen erforderlich sind. Die Kombination einiger Fähigkeiten von Flink ist in Abbildung 1-2 dargestellt.

Wie Storm und Spark Streaming bieten auch andere neue Technologien im Bereich der Streaming-Verarbeitung einige nützliche Funktionen, aber es ist schwer, eine mit der Kombination von Eigenschaften zu finden, die Flink bietet. Apache Samza zum Beispiel ist ein weiterer früher Open-Source-Prozessor für Streaming-Daten, aber auch er beschränkt sich auf einmalige Garantien und eine Low-Level-API. Auch Apache Apex bietet einige der Vorteile von Flink, aber nicht alle (z. B. ist es auf eine Low-Level-Programmier-API beschränkt, unterstützt keine Ereigniszeit und keine Batch-Berechnungen). Und keines dieser Projekte konnte eine Open-Source-Gemeinschaft anziehen, die mit der Flink-Gemeinschaft vergleichbar ist.

Schauen wir uns nun an, was Flink ist und wie das Projekt entstanden ist.

Get Einführung in Apache Flink now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.