Stream-Verarbeitung: Hazelcast Jet 4.0 lernt Python und wird reactive
Das Framework zum Verarbeiten paralleler Datenströme bekommt ein natives Python-Interface und führt Observables ein.
Das vor allem für sein In-Memory Data Grid (IMDG) bekannte Unternehmen Hazelcast hat das Streaming-Framework Jet 4.0 veröffentlicht. Das aktuelle Release des Frameworks zum Verarbeiten paralleler Datenströme bringt unter anderem Verbesserungen bei verteilten Transaktionen, native Python-Prozesse und mit Observable
eine neue Art von Senken, die reaktive Programmierung erlauben.
Das aktuelle Release hat eine Two-Phase-Commit-Implementierung (2PC) an Bord, die eine Ende-zu-Ende-Kommunikation für Quellen wie Java Message Service (JMS) mit einer garantiert einmaligen Verarbeitung der Daten (Exactly-once) gewährt. Bisher setzte Hazelcast auf den Chandy-Lamport-Algorithmus. Für dieses Schnappschussverfahren zum Ermitteln des globalen Zustands verteilter Systeme musste Jet jedoch die komplette Pipeline inklusive der Quellen und Senken mit einbeziehen.
Außerdem waren bisher sowohl Exactly-once- als auch At-least-once-Prozesse, also die garantiert exakt einmalige beziehungsweise mindestens einmalige Verarbeitung von Daten, nur im Zusammenspiel mit Quellen wie Apache Kafka möglich, nicht jedoch mit JMS.
Sprich Python mit mir!
Besonders im Bereich des Machine Learning (ML) spielt Python eine dominante Rolle, und zahlreiche ML-Anwendungen setzen auf die Verarbeitung von Datenströmen für die Zeitreihenanalyse oder -vorhersage. Hazelcast Jet 3.0 bot lediglich eine Java-API zum Definieren der Pipeline, aber keine direkte Python-Anbindung. Version 4.0 kann nun eigene Python-Prozesse auf jedem Knoten einrichten, die über gRPC (google Remote Procedure Calls) kommunizieren.
Entwickler können die Inhalte der Pipeline mit Python-Funktionen transformieren und dabei auf verbreitete Librarys wie Scikit und NumPy zurückgreifen. So können sie für ML-Modelle direkt auf Daten des Stream-Processing-Frameworks zugreifen.
Gut beobachtet
Mit Version 4.0 hält zudem das reaktive Programmieren Einzug in Hazelcast Jet. Observable
kann Nachrichten direkt weiterleiten, wenn sie anfallen und auf die Weise die Datenproduzenten von den Datenkonsumenten entkoppeln. Bisher hat die Jet-Pipeline ihre Daten typischerweise in einer Senke wie IMap
abgelegt, aus der Konsumenten manuell lesen mussten. Observable
dient nicht nur zum Verarbeiten anfallender Daten, sondern auch zum Behandeln von Fehlern und Informationen darĂĽber, dass ein Job abgeschlossen ist.
Hazelcast Jet 4.0 bringt zudem drei neue Konnektoren mit: fĂĽr Debezium, Kafka Connect und Twitter. Letzterer kann einen Stream von Tweets direkt in einer Pipeline verarbeiten. DarĂĽber hinaus baut das aktuelle Release auf IMDG 4.0 auf.
Jet: Von Null auf Vier in drei Jahren
Hazelcast hatte Jet erstmals 2017 vorgestellt. Das Framework kann Batch-Daten und Datenströme gleichermaßen verarbeiten. Jet setzt auf eine Pipeline in Form sogenannter Directed Acyclic Graphs (DAG), also gerichtete, azyklische Graphen. Generatoren verarbeiten die eingehenden Daten und verteilen sie an Akkumulatoren. Anschließend folgt die Zusammenführung in sogenannten Combiners, die das Ergebnis zum gewünschten Output liefern. Die ersten Verarbeitungsschritte erfolgen jeweils innerhalb eines Nodes, aber für die Zusammenführung überwindet das System die Cluster- und Knotengrenzen.
Die Versionsnummer 4.0 ist leicht irrefĂĽhrend, da die erste stabile Hauptversion im FrĂĽhjahr 2019 als Hazelcast Jet 3.0 erschien. Hintergrund ist, dass Hazelcast die Versionierung von Jet an die von IMDG angepasst hat.
Weitere Neuerungen in Jet 4.0 wie die vereinfachte Installation lassen sich dem Hazelcast-Blog entnehmen. Der Quellcode des Open-Source-Projekts findet sich auf GitHub. (rme)