Quickstart Kafka Streams - Ohne Hürden in die Echtzeitverarbeitung
Kafka Streams ist eine Open-Source Java Bibliothek, die einen entscheidenden Teil im Kafka Ökosystem darstellt. Sie ermöglicht die Verarbeitung und Analyse von Datenströmen in Echtzeit auf der Grundlage des Apache Kafka Projekts, einer verteilten Event-Streaming-Plattform. Mit Kafka Streams können Entwickler komplexe Stream-Verarbeitungslogik erstellen, ohne auf externe Frameworks oder Bibliotheken angewiesen zu sein.
In vielen Schulungen und Präsentationen taucht Kafka Streams nur als Icon auf, ohne auf die Details der Bibliothek einzugehen. Weiterhin ist für die Nutzung und Pilotierung von Kafka Streams immer ein Kafka Cluster, sowie eine kompilierte Java Applikation erforderlich. Diese Umstände halten viele potenzielle Nutzer davon ab, den richtigen Einstieg in die Technologie zu finden. Deshalb haben wir eine ganzheitliche Demo entwickelt, die mit wenigen Klicks ein Kafka Cluster, die benötigten Kafka Topics und eine Kafka Streams Anwendung startet. Dieser Artikel behandelt die Grundlagen von Kafka Streams, sowie die Schritte, wie Sie die Demo innerhalb von 10 Minuten zum Fliegen bringen.
Warum gibt es Kafka Streams
Schlüsselfeatures von Kafka Streams
Wird nur eine Instanz der Java App ausgeführt, besteht das Risiko, dass hier ein Bottleneck in der Verarbeitung entsteht. Des Weiteren würde bei einem Absturz der Applikation die Verarbeitung stillstehen.
Es ist möglich beliebig viele Instanzen der App mit der gleichen Application ID und Applikationslogik zu starten. Diese Instanzen verarbeiten nun die Daten parallelisiert, da jede Instanz automatisiert nur bestimmte Topic Partitionen übernimmt. Fällt eine der Instanzen aus, übernehmen die anderen Instanzen diese Partitionen. Das ist möglich durch die interne Koordination über das Kafka Cluster. Dieser Umstand erlaubt auch eine hohe Flexibilität, um auf Lastspitzen zu reagieren, sowie das System zu reduzieren, um ggf. Cloudkosten zu sparen. Es ist lediglich sicherzustellen, dass die zu verarbeitenden Topics mindestens so viele Partitionen haben, wie Instanzen existieren.
Aufsetzen des Quickstarts
Docker Installation
Für die Ausführung des Quickstarts benötigen Sie lediglich eine laufende Docker Installation mit Docker-Compose. Für Windows können Sie zum Beispiel Docker Desktop installieren (https://docs.docker.com/desktop/install/windows-install/). Führen Sie danach Docker Desktop aus. Sie sollten folgendes Fenster sehen.
Öffnen Sie nun eine Shell (zum Beispiel Powershell) und verifizieren Sie die Installation:
docker-compose --version
docker --version
Aufsetzen von Kafka
Laden Sie sich nun die docker-compose Datei hier herunter und speichern Sie es auf ihrem Rechner.
Navigieren Sie in der Shell zu dem Ordner, in dem sich die Datei auf ihrem Rechner befindet.
Starten Sie das Cluster
docker-compose up -d
docker build -t streamsdemo .
#Prüfen Sie, ob das Image existiert#
docker images
#Führen Sie das Image aus#
docker run --network host --name=streamsdemo-container streamsdemo
Tiefer einsteigen? Wir bieten einen Apache Kafka Streams Workshop an.
Wordcount mit Kafka Streams
Durch das Ausführen des „streamsdemo“ Containers, wird sowohl ein Producer, ein Consumer und eine Kafka Streams Applikation gestartet. In den Logs des Containers wird dann geloggt, welche Messages in das Quell Topic geschrieben werden, sowie, welche aggregierten Messages im Ziel Topic landen.
Etwa 10-15 Sekunden nach dem Starten des Containers, sieht man im Log jeweils die zufällig generierten Messages. Im Beispiel unter „Producing Message“
- Message: „Cherry Apple Orange“
- Message: „Cherry Cherry Orange“
Danach werden die neuen Messagen im output Topic angezeigt. Sprich, die Daten, die aus der Aggregation der Eingangsmessages berechnet wurden. Im Beispiel sieht man, dass für jede Frucht die in der Quellnachricht vorkommt, eine Nachricht im Zieltopic ankommt. Im ersten Fall sind es 3 verschiedene Früchte, daher 3 Nachrichten. Im zweiten Falls kommt „Cherry“ zweimal vor, daher sind es nur 2 Nachrichten. Die Nachrichten im Zieltopic enthalten immer die bisher gezählte Anzahl an Vorkommen eines Wortes – Wordcount. Dabei ist wichtig zu verstehen, dass hier keine Daten aktualisiert werden, sondern die Nachrichten immer hinten an das Topic angehängt wird. Das Zieltopic enthält nach diesem Beispiel 5 Nachrichten, das Quelltopic nur 2.
Sie können die Applikation belieb oft neustarten, bei jedem Neustart werden die Topics zurückgesetzt. Es werden so lange Daten generiert, bis der Container gestoppt wird.
Diese Kafka Streams Applikation arbeitet intern mit der Funktion „flatMapValues“. Da hier lediglich der Value der Quellnachricht verwendet und der Key ignoriert wird. Jede Nachricht wird über Leerzeichen in der Nachricht, in ein Array von Wörtern aufgespaltet. Nach diesen Wörtern wird dann gruppiert und die Anzahl der Vorkommen aufsummiert.
Neben dieser sehr einfachen Applikation können in Kafka Streams noch viele weitere Operationen durchgeführt werden. Dieser Artikel soll Ihnen vor allem die Möglichkeit geben, schnell einzusteigen und eine lauffähige Demo zu bekommen.