Über unsMediaKontaktImpressum
18. September 2019

Apache Flink: Stream Processing - Veröffentlichung der Version 1.9.0

Die Apache Flink Community gibt die Veröffentlichung des neuen Release von Apache Flink 1.9.0 bekannt. Das Ziel des Apache Flink-Projekts ist die Entwicklung eines Stream-Processing-Systems zur Vereinheitlichung und Bereitstellung vieler Formen von Echtzeit- und Offline-Datenverarbeitungsanwendungen sowie ereignisgesteuerten Anwendungen. In dieser Version hat die Community einen großen Schritt nach vorne gemacht. Das Unternehmen hinter Flink - Ververica (ehemals data Artisans) aus Berlin - erläutert die neuen Funktionen rund um Apache Flink 1.9.

Wichtige Funktionen sind die Wiederherstellung für Batch-Jobs und eine Vorschau auf die neue Blink-basierte Suchmaschine für Abfragen der Tabellen-API und über SQL. Die State Processor API ist nun ebenfalls verfügbar. Sie war eine der am häufigsten nachgefragten Funktionen und ermöglicht, Savepoints mit Flink DataSet-Jobs zu lesen und zu schreiben. Zudem enthält Flink 1.9 noch ein überarbeitetes WebUI (Web User Interface für Flink) sowie Previews auf die neue Python Table API von Flink und deren Integration in das Apache Hive-Ökosystem.

Apache Flink: Neue Funktionen von Release 1.9.0

Feinkörnige Batch-Recovery (FLIP-1)

Die Zeit, die benötigt wurde, um einen Batch-Job (DataSet, Table API und SQL) nach einem Task-Fehler wiederherzustellen, wurde erheblich verkürzt. Bis Flink 1.9 wurden Task-Fehler in Batch-Jobs behoben, indem alle Tasks abgebrochen und der gesamte Job neu gestartet wurde, d.h. der Job wurde von Grund auf neu gestartet und der gesamte Fortschritt wurde aufgehoben. Mit dieser Version kann Flink konfiguriert werden, um die Wiederherstellung auf die Aufgaben zu beschränken, die sich in der gleichen Failover-Region befinden. Eine Failover-Region ist die Gesamtheit von Aufgaben, die über den Pipeline-Datenaustausch verbunden sind. Daher definieren die Batch-Shuffle-Verbindungen eines Jobs die Grenzen seiner Failover-Bereiche. Weitere Informationen finden Sie in FLIP-1

Um diese neue Failover-Strategie zu nutzen, müssen Sie die folgenden Einstellungen vornehmen:

  • Stellen Sie sicher, dass Sie den Eintrag jobmanager.execution.failover-strategy: region in your flink-conf.yaml haben. 

Hinweis: Die Konfiguration der 1.9-Distribution hat diesen Eintrag standardmäßig, aber wenn Sie eine Konfigurationsdatei aus früheren Setups wiederverwenden, müssen Sie ihn manuell hinzufügen.

Darüber hinaus müssen Sie den ExecutionMode von Batch-Jobs in der ExecutionConfig auf BATCH setzen, um zu konfigurieren, dass Daten-Shuffles nicht „gepipelined“ werden und Jobs mehr als einen Failover-Bereich haben.

Die Failover-Strategie "Region" verbessert auch die Wiederherstellung von "peinlich parallelen" Streaming-Jobs, d.h. Jobs ohne Shuffle wie keyBy() oder Rebalance. Bei der Wiederherstellung eines solchen Jobs werden nur die Aufgaben der betroffenen Rohrleitung (Failover-Bereich) neu gestartet. Für alle anderen Streaming-Jobs ist das Wiederherstellungsverhalten das gleiche wie in früheren Flink-Versionen.

Zustandsprozessor-API (FLIP-43)

Bis zu Flink 1.9 war der Zugriff auf den Zustand eines Jobs von außen auf den (noch) experimentellen abfragbaren Zustandbeschränkt. Mit dieser Version wird eine neue, leistungsstarke Bibliothek zum Lesen, Schreiben und Ändern von Status-Snapshots über die Batch-DataSet-API eingeführt. In der Praxis bedeutet das:

  • Der Status des Flink-Jobs kann gebootet werden, indem Daten aus externen Systemen, wie beispielsweise externen Datenbanken, gelesen und in einen Savepoint umgewandelt werden.
  • Der Status in Savepoints kann über eine der Batch-APIs von Flink (DataSet, Table, SQL) abgefragt werden, z.B. um relevante Zustandsmuster zu analysieren oder auf Abweichungen im Zustand zu prüfen, die Anwendungsaudits oder Fehlersuche unterstützen können.
  • Das Schema des Zustands in Savepoints kann offline migriert werden, im Vergleich zu dem bisherigen Ansatz, der eine Online-Migration beim Schemazugriff erfordert.
  • Ungültige Daten in Savepoints können identifiziert und korrigiert werden.

Die neue State Processor API deckt alle Varianten von Snapshots ab: Savepoints, vollständige Checkpoints und inkrementelle Checkpoints. Weitere Informationen finden Sie in FLIP-43.

Stop-with-Savepoint (FLIP-34)

Das Abbrechen mit einem Savepoint ist eine gängige Operation zum Stoppen/Wiederaufsetzen, Forken oder Aktualisieren von Flink-Jobs. Die bestehende Implementierung garantierte jedoch nicht die Ausgabepersistenz auf externen Speichersystemen für genau einmalige Sinks. Um die End-to-End-Semantik beim Stoppen eines Jobs zu verbessern, führt Flink 1.9 einen neuen SUSPEND-Modus ein, um einen Job mit einem Savepoint zu stoppen, der mit den emittierten Daten konsistent ist. Sie können einen Job mit dem CLI-Client von Flink wie folgt anhalten:

bin/flink stop -p [:targetDirectory] | jobId:jobId

Der endgültige Job-Status wird bei Erfolg auf FINISHED gesetzt, so dass Benutzer Fehler des angeforderten Vorgangs erkennen können.

Weitere Informationen finden Sie in FLIP-34. 

Flink WebUI-Überarbeitung

Nach einer Diskussion über die Modernisierung der Interna von Flinks WebUI wurde diese Komponente mit der neuesten stabilen Version von Angular rekonstruiert – im Grunde genommen ein Bump von Angular 1.x auf 7.x. Die neu gestaltete Version ist der Standard in 1.9.0, es gibt jedoch einen Link zum Wechsel auf die alte WebUI.

Als nächstes haben wir den Planner von Blink erweitert, um die neue Optimierer-Schnittstelle so zu implementieren, dass es nun zwei Plug-fähige Abfrageprozessoren zur Ausführung von Tabellen-API- und SQL-Anweisungen gibt: den Flink-Prozessor vor 1.9 und den neuen Blink-basierten Abfrageprozessor. Der Blink-basierte Abfrageprozessor bietet eine bessere SQL-Abdeckung (volle TPC-H-Abdeckung in 1.9, TPC-DS-Abdeckung ist für das nächste Release geplant) und eine verbesserte Performance für Batch-Abfragen als Ergebnis einer umfangreicheren Abfrageoptimierung (kostenbasierte Planauswahl und mehr Optimierungsregeln), einer verbesserten Codegenerierung und abgestimmter Operatorimplementierungen. Der Blink-basierte Abfrageprozessor bietet auch einen leistungsfähigeren Streaming-Runner mit einigen neuen Funktionen (z.B. Dimension Table Join, TopN, Deduplizierung) und Optimierungen zur Lösung von Datenverzerrungen bei der Aggregation und weitere nützliche integrierte Funktionen.

Hinweis: Die Semantik und der Satz der unterstützten Operationen der Abfrageprozessoren sind meist, aber nicht vollständig ausgerichtet.

Die Integration des Query-Prozessors von Blink ist jedoch noch nicht vollständig abgeschlossen. Daher ist der Flink-Prozessor vor 1.9 immer noch der Standardprozessor in Flink 1.9 und wird für Produktionseinstellungen empfohlen. Sie können den Blink-Prozessor aktivieren, indem Sie ihn über die EnvironmentSettings beim Erstellen einer TableEnvironment konfigurieren. Der ausgewählte Prozessor muss sich im Klassenpfad des ausführenden Java-Prozesses befinden. Bei Cluster-Setups werden beide Query-Prozessoren automatisch mit der Standardkonfiguration geladen. Wenn Sie eine Abfrage von Ihrer IDE aus ausführen, müssen Sie Ihrem Projekt explizit eine Planner-Abhängigkeit hinzufügen. 

Verbesserungen an der Tabellen-API und SQL

Neben dem spannenden Fortschritt rund um den Blink-Planner arbeitete die Community an einer ganzen Reihe weiterer Verbesserungen an diesen Schnittstellen, darunter:

  • Scala-freie Tabellen-API und SQL für Java-Anwender (FLIP-32). Im Rahmen des Refactoring und der Aufteilung des Flink-Table-Moduls wurden zwei separate API-Module für Java und Scala erstellt. Für Scala-Benutzer ändert sich nichts wirklich, aber Java-Benutzer können jetzt die Tabellen-API und/oder SQL verwenden, ohne eine Scala-Abhängigkeit einzubeziehen.
  • Überarbeitung des Tabellen-API-Typsystems (FLIP-37). Die Community implementierte ein neues Datentypsystem, um die Table API von der TypeInformation-Klasse von Flink zu trennen und die Einhaltung des SQL-Standards zu verbessern. Dies ist noch in Arbeit und wird voraussichtlich in der nächsten Version abgeschlossen sein. In Flink 1.9 werden UDFs – unter anderem – noch nicht auf das neue Schriftsystem portiert.
  • Mehrspaltige und mehrzeilige Transformationen für die Tabellen-API (FLIP-29). Die Funktionalität der Tabellen-API wurde um eine Reihe von Transformationen erweitert, die mehrzeilige und/oder mehrspaltige Ein- und Ausgänge unterstützen. Diese Transformationen erleichtern die Implementierung der Verarbeitungslogik, die mit relationalen Operatoren schwer zu implementieren wäre, erheblich.
  • Neue, einheitliche Katalog-APIs (FLIP-30). Wir haben die Katalog-APIs überarbeitet, um Metadaten zu speichern und die Handhabung von internen und externen Katalogen zu vereinheitlichen. Diese Bemühungen wurden hauptsächlich als Voraussetzung für die Hive-Integration initiiert (siehe unten), verbessern aber den allgemeinen Komfort bei der Verwaltung von Katalog-Metadaten in Flink. Neben der Verbesserung der Katalogschnittstellen haben wir auch deren Funktionalität erweitert. Bisherige Tabellendefinitionen für Tabellen-API- oder SQL-Abfragen waren volatil. Mit Flink 1.9 können die Metadaten von Tabellen, die mit einer SQL DDL-Anweisung registriert sind, in einem Katalog persistiert werden. Das bedeutet, dass Sie eine Tabelle, die von einem Kafka-Thema unterstützt wird, zu einem Metastore-Katalog hinzufügen und von da an diese Tabelle abfragen können, wenn Ihr Katalog mit Metastore verbunden ist.
  • DDL-Unterstützung in der SQL-API (FLINK-10232). Bis zu diesem Zeitpunkt unterstützte Flink SQL nur DML-Anweisungen (z.B. SELECT, INSERT). Externe Tabellen (Tabellenquellen und Sinks) mussten über Java/Scala-Code oder Konfigurationsdateien registriert werden. Für 1.9 haben wir die Unterstützung für SQL DDL-Anweisungen zur Registrierung und Entfernung von Tabellen und Views (CREATE TABLE, DROP TABLE) hinzugefügt. Allerdings haben wir noch keine Stream-spezifischen Syntaxerweiterungen zur Definition der Timestamp-Extraktion und Watermark-Generierung hinzugefügt. Die volle Unterstützung für Streaming-Anwendungsfälle ist für das nächste Release geplant.

Vorschau auf die vollständige Hive-Integration (FLINK-10556)

Apache Hive wird im Ökosystem von Hadoop häufig verwendet, um große Mengen an strukturierten Daten zu speichern und abzufragen. Hive ist nicht nur ein Abfrageprozessor, sondern enthält auch einen Katalog namens Metastore, um große Datensätze zu verwalten und zu organisieren. Ein gemeinsamer Integrationspunkt für Abfrageprozessoren ist die Integration in den Metastore von Hive, um die von Hive verwalteten Daten nutzen zu können.

Seit kurzem implementiert die Community einen externen Katalog für Flinks Table API und SQL, der sich mit Hives Metastore verbindet. In Flink 1.9 können Benutzer alle Daten, die in Hive gespeichert sind, abfragen und verarbeiten. Wie bereits beschrieben, können Sie auch Metadaten von Flink-Tabellen in Metastore persistieren. Darüber hinaus bietet die Hive-Integration Unterstützung für die Verwendung der UDFs von Hive in der Flink Table API oder SQL-Abfragen. Weitere Informationen finden Sie in FLINK-10556.

Während bisher Tabellendefinitionen für Tabellen-API- oder SQL-Abfragen immer volatil waren, erlaubt der neue Catalog Connector zusätzlich das Fortbestehen einer Tabelle im Metastore, die mit einer SQL DDL-Anweisung erstellt wird (siehe oben). Das bedeutet, dass Sie sich mit Metastore verbinden und eine Tabelle registrieren, die z.B. durch ein Kafka-Thema unterstützt wird. Von nun an können Sie diese Tabelle abfragen, wenn Ihr Katalog mit Metastore verbunden ist.

Bitte beachten Sie, dass die Hive-Unterstützung in Flink 1.9 experimentell ist. Wir planen, diese Funktionen für das nächste Release zu stabilisieren und freuen uns auf Ihr Feedback.

Vorschau auf die neue Python Table API (FLIP-38)

Dieses Release führt auch eine erste Version einer Python Table API (FLIP-38) ein. Dies ist der Anfang in Richtung unseres Ziels, eine vollwertige Python-Unterstützung in Flink zu bieten. Die Funktion wurde als schlanker Python-API-Wrapper um die Tabellen-API herum entwickelt, der im Wesentlichen Python Table API-Methodenaufrufe in Java Table API-Aufrufe übersetzt. In der ersten Version, die mit Flink 1.9 ausgeliefert wird, unterstützt die Python Table API noch keine UDFs, sondern nur standardisierte relationale Operationen. Die Unterstützung von in Python implementierten UDFs ist für zukünftige Releases geplant.

Wenn Sie die neue Python-API ausprobieren möchten, müssen Sie PyFlink manuell installieren. Von dort aus können Sie sich dieses Walk-through ansehen oder sie selbst erkunden. Die Community arbeitet derzeit an der Vorbereitung eines Pyflink-Python-Pakets, das für die Installation über PIP zur Verfügung gestellt wird.

Wichtige Änderungen

  • Die Tabellen-API und SQL sind nun Teil der Standardkonfiguration der Flink-Distribution. Zuvor mussten die Tabellen-API und SQL aktiviert werden, indem die entsprechende JAR-Datei von ./opt nach ./lib verschoben wurde.
  • Die Machine Learning Library (flink-ml) wurde im Vorfeld von FLIP-39 entfernt.
  • Die alten DataSet- und DataStream-Python-APIs wurden zugunsten von FLIP-38 entfernt.
  • Beachten Sie, dass bestimmte Komponenten, die mit externen Systemen interagieren (Konnektoren, Dateisysteme, Reporter), möglicherweise nicht funktionieren, da die jeweiligen Projekte die Java 9-Unterstützung übersprungen haben.

Vorschau auf den neuen Blink SQL Query Processor

Nach der Spende von Blink an Apache Flink arbeitete die Community an der Integration von Blinks Query Optimizer und Runtime für die Tabellen-API und SQL. In einem ersten Schritt haben wir das monolithische Flink-Table-Modul in kleinere Module (FLIP-32) refaktoriert. Dies führte zu einer klaren Trennung und klar definierten Schnittstellen zwischen den Modulen Java und Scala API sowie den Modulen Optimizer und Runtime.

Versionshinweise zu Flink 1.9.0

Bitte lesen Sie die Versionshinweise für eine detailliertere Liste der Änderungen und neuen Funktionen, wenn Sie planen, Ihr Flink-Setup auf Flink 1.9.0 zu aktualisieren.

Apache Flink Support

Bei weiteren Detailfragen zu Apache Flink 1.9 unterstützen die Expert*innen des deutschen Software-Startups Ververica (ehemals data Artisans GmbH). Informationen zum Support sind auf den Seiten von Ververica zu finden.

Apache Flink: Changelog und Download der neuen Version

Detailierte Informationen zu den neuen Funktionen von Apache Flink finden Sie im vollständigen Release Changelog.

Die binären Verteilungs- und Quell-Artefakte für diese Version sind über die Download-Seite des Flink-Projekts zusammen mit der aktualisierten Dokumentation verfügbar. Flink 1.9 ist API-kompatibel zu früheren 1.x-Versionen für APIs, die mit der @Public-Annotation kommentiert sind.

Bitte fühlen Sie sich ermutigt, das Release herunterzuladen und Ihre Gedanken über die Flink-Mailinglisten oder JIRA mit der Community zu teilen. Ihr Feedback ist willkommen!

AH

Sie möchten zukünftig per Newsletter der Informatik Aktuell informiert werden? Hier können Sie sich anmelden.

Das könnte Sie auch interessieren
botMessage_toctoc_comments_9210