Kafka in a Nutshell
Apache Kafka ist eine verteilte Stream Processing und Messaging Plattform, die sich für die Verarbeitung von Echtzeit Datenströmen (sog. Stream Processing) eignet. Entwickelt wurde die Plattform bei LinkedIn. Dies, weil die klassischen Messaging-Systeme zu der Zeit den eigenen hohen Anforderungen (in erster Linie bzgl. Fehlertoleranz und Skalierbarkeit) nicht gerecht wurden. Mit der Eigenentwicklung wurde wichtige Pionierarbeit geleistet. Später wurde Kafka durch die Apache Foundation als Open-Source-Projekt weiterverfolgt. Kafka ist ein Publish-Subscribe-System, das auf hohe Performanz bezüglich Nachrichtendurchsatz und -latenz ausgelegt ist. Es bietet unter anderem folgende Funktionalitäten:
- Lesen und Schreiben von Nachrichtenströmen, ähnlich wie bei Message Queues oder Enterprise-Messaging-Systemen.
- Datenstreams werden fehlertolerant und persistent gespeichert.
- Kurze Latenz für Echtzeitsysteme
- Kafka Connect: Adapter Framework für das Anbinden von Daten über unterschiedliche Schnittstellen und Big-Data-Technologien wie JDBC, HDFS, Splunk, Elasticsearch, NoSQL, Spark, etc.
- Kafka Streams: Framework für Stream Processing mit leistungsstarken Funktionen für das Verarbeiten von Datenströmen
Der Ausdruck «verteilte Streaming Plattform» beschreibt, dass Kafka in einem Cluster, bestehend aus mehreren Servern (sog. Broker), betrieben werden kann. Ein grosser Vorteil von Kafka ist, dass es sehr flexibel auf günstiger Hardware (sog. Commodity-Hardware) oder auch in Containern betrieben werden kann und kein teures, dediziertes Setup voraussetzt.
Daten, die mittels Apache Kafka transportiert werden, werden in sogenannten «Topics» gespeichert. Das kommt eigentlich aus der Welt der relationalen Datenbanken. Man kann sich ein Topic wie eine Tabelle vorstellen. Diese werden von sogenannten Producern beschrieben und von den sogenannten Consumern bzw. Konsumenten gelesen. Topics sind in Partitionen unterteilt, wobei diese auf mehrere Broker verteilt sind. Das erlaubt ein Auslesen der Daten parallel von einem Topic.
Hier kommt auch gleich ein wichtiger Unterschied zu klassischen Messaging-Systemen ins Spiel: Bei ihnen werden typischerweise Nachrichten, sobald sie von allen Konsumenten gelesen wurden, aus der Queue gelöscht. Bei Kafka hingegen, hat ein Topic, eine nach Dauer konfigurierbare Lebenszeit der Speicherung (Retention Time). Wird diese erreicht, werden Nachrichten, die älter sind, von der Festplatte gelöscht. Solange die Nachricht aber im Topic ist, kann sie beliebig oft und von beliebig vielen Konsumenten gelesen werden. Dabei kann das ganze Topic oder ein Teil davon ab einem bestimmten Offset gelesen werden. Kafka übergibt somit die Verantwortung darüber, welche Daten bereits konsumiert wurden, komplett an den Konsumenten. Konkret heisst das, dass ein Topic gleichzeitig von einer Echtzeit Applikation, einem Batch-Prozess und einem Machine-Learning-Algorithmus gelesen werden kann.
Apache Kafka hat den Anspruch, das zentrale Nervensystem innerhalb einer Unternehmung zu werden, welches alle Daten und Systeme miteinander verknüpft. Dabei sollen die Daten in den Mittelpunkt gerückt werden, hin zu einer ereignisgesteuerten Architektur. Dies soll sowohl für Start-ups wie auch für Grosskonzerne funktionieren.


