Apache Kafka
Apache Kafka[1]
| |
---|---|
![]() | |
Basisdaten
| |
Hauptentwickler | Apache Software Foundation |
Entwickler | Apache Software Foundation, LinkedIn |
Erscheinungsjahr | 2011 |
Aktuelle Version | 1.0.0[2] (1. November 2017) |
Betriebssystem | Unixoide, Mac OS, Windows |
Programmiersprache | Scala |
Kategorie | Streamprozessor |
Lizenz | Apache-Lizenz 2.0 |
kafka.apache.org |
Apache Kafka ist ein Open-Source Software-Projekt der Apache Software Foundation, das insbesondere der Verarbeitung von Datenströmen dient. Kafka ist dazu entwickelt, Datenströme zu speichern und zu verarbeiten, und stellt eine Schnittstelle zum Laden und Exportieren von Datenströmen zu Drittsystemen bereit. Die Kernarchitektur bildet ein verteiltes Transaktions-Log.
Ursprünglich wurde Apache Kafka von LinkedIn entwickelt und ist seit 2012 Teil der Apache Software Foundation. Im Jahr 2014 gründeten die Entwickler das Unternehmen Confluent aus LinkedIn heraus, welches die Weiterentwicklung von Apache Kafka fokussiert. Apache Kafka ist ein verteiltes System, das skalierbar und fehlertolerant und somit für Big-Data-Anwendungen geeignet ist.
Funktionsweise

Den Kern des Systems bildet ein Rechnerverbund (Cluster), bestehend aus sogenannten Brokern. Broker speichern Schlüssel-Wert-Nachrichten zusammen mit einem Zeitstempel in Topics. Topics wiederum sind in Partitionen aufgeteilt, welche im Kafka Cluster verteilt und repliziert werden. Innerhalb einer Partition werden die Nachrichten in der Reihenfolge gespeichert, in der sie geschrieben wurden. Lese- und Schreibzugriffe umgehen den Arbeitsspeicher durch die direkte Anbindung der Festplatten mit dem Netzwerkadapters (zero copy), so dass weniger Kopiervorgänge vor dem Schreiben oder Versenden von Nachrichten nötig sind.[3][4]
Anwendungen, die Daten in einen Kafka Cluster schreiben, werden als Producer bezeichnet, Anwendungen, die Daten von dort lesen, als Consumer. Zur Datenstromverarbeitung kann Kafka Streams verwendet werden. Kafka Streams ist eine Java Bibliothek, die Daten aus Kafka liest, verarbeitet und die Ergebnisse nach Kafka zurück schreibt. Kafka kann auch mit anderen Streams-Verarbeitungssystemen verwendet werden. Seit der Version 0.11.0.0 wird "transaktionales Schreiben" unterstützt, so dass garantiert werden kann, dass Nachrichten genau ein einziges Mal verarbeitet werden, wenn eine Anwendung Kafka Streams verwendet ("exactly-once processing").
Kafka unterstützt zwei Arten von Topics: 'normal' und 'compacted' Topics. Normale Topics garantieren, Nachrichten für einen konfigurierbaren Zeitraum vorzuhalten oder einen gewissen Speicherbedarf nicht zu überschreiten. Liegen Nachrichten vor, die älter sind als die konfigurierte 'retention time', oder ist das Speicherlimit einer Partition überschritten, kann Kafka alte Nachrichten löschen, um Festplattenspeicher freizugeben. Standardmäßig speichert Kafka Nachrichten für 7 Tage, aber es ist auch möglich Nachrichten für immer zu speichern. Neben 'normal' Topics bietet Kafka auch 'compacted' Topic an, die keiner Zeit oder Platzlimitierung unterliegen. Statt dessen werden neuere Nachrichten als Aktualisierung ('updates') alter Nachrichten mit dem gleichen Schlüssel interpretiert. Dabei wird garantiert, dass die neueste Nachricht pro Schlüssel nie gelöscht wird. Nutzer können Nachrichten jedoch explizit löschen, indem sie eine Spezialnachricht (sog. 'tombstone') mit null-Wert als Schlüssel schreiben.
Kafka bietet vier Hauptschnittstellen an:
- Producer API– Für Anwendungen, die Daten in einen Kafka Cluster schreiben wollen.
- Consumer API– Für Anwendungen, die Daten aus einen Kafka Cluster lesen wollen.
- Connector API– Import/Export Schnittstelle zur Anbindung von Drittsystemen.
- Streams API– Java Bibliothek zur Datenstromverarbeitung.
Die Consumer- und Producer-Schnittstellen basieren auf dem Kafka-Nachrichtenprotokoll und können als Referenzimplementierung in Java angesehen werden. Das eigentliche Kafka Nachrichtenprotokoll ist ein Binäres Protokoll und erlaubt es damit Consumer und Producer Clients in jeder beliebigen Programmiersprache zu entwickeln. Damit ist Kafka nicht an das JVM-Ökosystem gebunden. Eine Liste mit verfügbaren Nicht-Java Clients wird im Apache Kafka Wiki gepflegt.
Kafka Connect API
Kafka Connect (oder Connect API) bieten eine Schnittstellen zum Laden/Exportieren von Daten aus/in Drittsysteme. Es ist seit Version 0.9.0.0 verfügbar und baut auf der Consumer und Producer API auf. Kafka Connect führt sogenannte Konnektoren ("connectors") aus, welche die eigentlich Kommunikation mit dem Drittsystem übernehmen. Dabei definiert die Connect API die Programmierschnittstellen, die von einem Connector implementiert werden müssen. Es gibt bereits viele frei verfügbare und kommerzielle Konnektoren, die genutzt werden können. Apache Kafka liefert selbst keine produktreifen Konnektoren.
Kafka Streams API
Kafka Streams (oder Streams API) ist eine Java-Bibliothek zur Datenstromverarbeitung und ist seit Version 0.10.0.0 verfügbar. Die Bibliothek ermöglichst es, zustandsbehaftete Stromverarbeitungsprogramme zu entwickeln, die sowohl skalierbar, elastisch als auch fehlertolerant sind. Dafür bietet Kafka Streams eine eigene DSL an, die Operatoren zum Filtern, Mappen oder Gruppieren erhält. Des Weiteren werden Zeitfenster, Joins, und Tabellen unterstützt. Ergänzend zur DSL ist es auch möglich, eigene Operatoren in der 'Processor API' zu implementieren. Diese Operatoren können auch in der DSL genutzt werden. Zur Unterstützung zustandsbehafteter Operatoren wird RocksDB verwendet. Dies erlaubt es, Operatorzustände lokal vorzuhalten und Zustände, die größer als der verfügbare Hauptspeicher sind, als RocksDB Daten auf die Festplatte auszulagern. Um den Anwendungszustand verlustsicher zu speichern, werden alle Zustandsänderungen zusätzlich in einem Kafka Topic protokolliert. Im Falle eines Ausfalls können alle Zustandsübergänge aus dem Topic ausgelesen werden, um den Zustand wiederherzustellen.
Kafka Versions Kompatibilität
Bis zur Version 0.9.0 sind Kafka Broker mit älteren Client Versionen rückwärts kompatibel. Seit Version 0.10.0.0, können Broker auch vorwärts kompatibel mit neuen Clients kommunizieren. Für die Streams API beginnt diese Kompatibilität erst mit Version 0.10.1.0.
Literatur
- Ted Dunning, Ellen M. D. Friedman: Streaming Architecture. New Designs Using Apache Kafka and MapR. O’Reilly Verlag, Sebastopol 2016, ISBN 978-1-4919-5392-1.
- Neha Narkhede, Gwen Shapira, Todd Palino: Kafka: The Definitive Guide. Real-time data and stream processing at scale. O’Reilly Verlag, Sebastopol 2017, ISBN 978-1-4919-3616-0.
Weblinks
Einzelnachweise
- ↑ Apache Kafka auf GitHub. In: github.com. Abgerufen am 5. März 2018.
- ↑ Apache Kafka: Download
- ↑ Alexander Neumann: Apache-Kafka-Entwickler erhalten 24 Millionen US-Dollar. In: heise Developer. Heise Medien GmbH & Co. KG, 9. Juli 2015, abgerufen am 21. Juli 2016.
- ↑ Thomas Joos: So analysieren Sie Logdateien mit Open Source Software. Realtime Analytics mit Apache Kafka. In: BigData Insider. Vogel Business Media GmbH & Co. KG, 24. August 2015, abgerufen am 21. Juli 2016.