Apache Kafka
Originalautor (en) | |
---|---|
Entwickler (en) | Apache Software Foundation |
Erstveröffentlichung | Januar 2011[2] |
Stabile Version | 3.2.0[3] / 9. Mai 2022 |
Repository | |
Geschrieben in | Scala, Java |
Betriebssystem | Plattformübergreifend |
Typ | Stream -Verarbeitung, Message Broker |
Lizenz | Apache -Lizenz 2.0 |
Webseite | Kafka |
Apache Kafka ist ein verteilt Event Store und Stream-Prozessing Plattform. Es ist ein Open Source System entwickelt von der Apache Software Foundation geschrieben in Java und Scala. Das Projekt zielt darauf ab, eine einheitliche Plattform mit hohem Durchsatz mit geringer Latenz für die Umgang mit Echtzeitdatenfeeds bereitzustellen. Kafka kann über Kafka Connect mit externen Systemen (für Datenimport/Export) eine Verbindung herstellen und die Kafka -Streams bereitstellen Bibliotheken Für Stream -Verarbeitungsanwendungen. Kafka verwendet ein binär TCP-Basiertes Protokoll, das für die Effizienz optimiert ist und sich auf eine "Nachrichtensatz" -Traktion beruht, die Nachrichten auf natürliche Weise zusammenfasst, um den Overhead des Netzwerk -Roundtrips zu verringern. Dies "führt zu größeren Netzwerkpaketen, größeren sequentiellen Festplattenoperationen, zusammenhängenden Speicherblöcken [...], wodurch Kafka einen bursty -Stream von zufälligen Nachrichten, die in linearen Schreibvorgänge geschrieben werden, verwandeln können."[4]
Geschichte
Kafka wurde ursprünglich entwickelt bei LinkedInund wurde anschließend Anfang 2011 offen bezogen. Jay Kreps, Neha Narkhede Und Jun Rao half mit der Mitarbeit von Kafka.[5] Abschluss aus dem Apache -Inkubator ereignete sich am 23. Oktober 2012. Jay Kreps entschied sich, die Software nach dem Autor zu benennen Franz Kafka Weil es "ein für das Schreiben optimiertes System" ist und er Kafkas Arbeit mochte.[6]
Anwendungen
Apache Kafka basiert auf dem Logund es ermöglicht Benutzern, es abonnieren und Daten für eine beliebige Anzahl von Systemen oder Echtzeitanwendungen veröffentlichen. Beispielanwendungen umfassen das Verwalten von Passagier- und Treiberübereinstimmungen bei UberEchtzeitanalytik und Bereitstellung von Analysen und Vorhersagewartung zum Britisches Gas Smart Home und zahlreiche Echtzeitdienste in ganz LinkedIn durchführen.[7]
Die Architektur
Kafka speichert Schlüsselwertnachrichten, die aus willkürlich vielen Prozessen stammen Produzenten. Die Daten können in unterschiedlichen "Themen" in verschiedene "Partitionen" aufgeteilt werden. Innerhalb einer Partition werden Nachrichten streng von ihren Offsets (die Position einer Nachricht innerhalb einer Partition) bestellt und zusammen mit einem Zeitstempel indexiert und gespeichert. Andere Prozesse, die als "Verbraucher" bezeichnet werden, können Nachrichten aus Partitionen lesen. Für die Stream -Verarbeitung bietet Kafka die Streams -API an, mit der Java -Anwendungen geschrieben werden können, die Daten von Kafka verbrauchen und Ergebnisse an Kafka zurückschreiben. Apache Kafka arbeitet auch mit externen Stream -Verarbeitungssystemen wie z. Apache Apex, Apache -Strahl, Apache Flink, Apache Funken, Apache Sturm und Apache Nifi.
Kafka läuft auf einem Cluster von einem oder mehreren Servern (als Makler genannt), und die Partitionen aller Themen werden über die Clusterknoten verteilt. Zusätzlich werden Partitionen an mehrere Broker repliziert. Diese Architektur ermöglicht es Kafka, massive Nachrichtenströme auf fehlertolerante Weise zu liefern, und es hat es ihm ermöglicht, einige der konventionellen Messaging-Systeme wie ersetzt Java Message Service (JMS), Erweiterte Nachrichtenwarteprotokoll (AMQP) usw. Seit der Veröffentlichung von 0.11.0.0 bietet Kafka an Transaktions schreibt, die genau die Stream-Verarbeitung mithilfe der Streams-API liefern.
Kafka unterstützt zwei Arten von Themen: regelmäßig und verdichtet. Regelmäßige Themen können mit einer Retentionszeit oder einem Platz gebunden werden. Wenn Datensätze älter als die angegebene Aufbewahrungszeit sind oder wenn der Speicherplatz für eine Partition überschritten wird, darf Kafka alte Daten in freien Speicherplatz löschen. Standardmäßig werden Themen mit einer Retentionszeit von 7 Tagen konfiguriert, aber es ist auch möglich, Daten auf unbestimmte Zeit zu speichern. Bei verdichteten Themen verfallen die Datensätze nicht aufgrund von Zeit- oder Raumgrenzen. Stattdessen behandelt Kafka spätere Nachrichten als Updates für ältere Nachricht mit demselben Schlüssel und garantiert, dass sie die neueste Nachricht pro Schlüssel niemals löschen. Benutzer können Nachrichten vollständig löschen, indem sie eine sogenannte Tombstone-Nachricht mit Null-Wert für einen bestimmten Schlüssel schreiben.
In Kafka gibt es fünf Haupt -APIs:
- Produzentapi - Ermöglicht eine Bewerbung, um Streams of Records zu veröffentlichen.
- Verbraucher -API - Ermöglicht eine Anwendung, Themen und Prozesse von Datensätzen zu abonnieren.
- Anschluss -API - führt den wiederverwendbaren Produzenten- und Verbraucher -APIs aus, mit dem die Themen mit den vorhandenen Anwendungen verknüpft werden können.
- Ströme API - Diese API konvertiert die Eingangsströme in die Ausgabe und erzeugt das Ergebnis.
- Admin -API - Wird verwendet, um Kafka -Themen, Makler und andere Kafka -Objekte zu verwalten.
Die Verbraucher- und Produzenten -APIs sind entkoppelt Aus der Kernfunktionalität von Kafka durch eine zugrunde liegende Nachricht Protokoll. Dies ermöglicht das Schreiben kompatibler API -Ebenen in jeder Programmiersprache, die so effizient sind wie die mit Kafka gebündelte Java -APIs. Das Apache Kafka -Projekt unterhält eine Liste solcher APIs von Drittanbietern.
Kafka apis
API anschließen
Kafka Connect (oder CONNECT -API) ist ein Framework zum Import/Exportieren von Daten von/in andere Systeme. Es wurde in der KAFKA 0.9.0.0 -Version hinzugefügt und verwendet die Hersteller- und Verbraucher -API intern. Das Connect-Framework selbst führt sogenannte "Anschlüsse" aus, die die tatsächliche Logik zum Lesen/Schreiben von Daten aus anderen Systemen implementieren. Die Connect -API definiert die Programmierschnittstelle, die implementiert werden muss, um einen benutzerdefinierten Anschluss zu erstellen. Viele Open Source- und kommerzielle Anschlüsse für beliebte Datensysteme sind bereits verfügbar. Apache Kafka selbst enthält jedoch keine Produktionsanschlüsse.
Ströme API
Kafka Streams (oder API-Streams) ist eine in Java geschriebene Stream-Prozessbibliothek. Es wurde in der KAFKA 0,10.0.0 -Version hinzugefügt. Die Bibliothek ermöglicht die Entwicklung staatlicher Stream-Verarbeitungsanwendungen, die skalierbar, elastisch und vollständig fehlertolerant sind. Die Haupt-API ist eine Stream-Verarbeitung Domänenspezifische Sprache (DSL), das hochrangige Betreiber wie Filter bietet, Karte, Gruppierung, Fenster, Aggregation, Verbindungen und der Begriff der Tabellen. Darüber hinaus kann die Prozessor-API verwendet werden, um benutzerdefinierte Operatoren für einen Entwicklungsansatz mit niedrigerem Niveau zu implementieren. Die DSL- und Prozessor -API kann ebenfalls gemischt werden. Für die staatliche Stream -Verarbeitung verwendet Kafka -Streams Rocksdb Aufrechterhaltung des lokalen Betreiberstaates. Da RocksDB auf die Festplatte schreiben kann, kann der aufrechterhaltene Zustand größer sein als der verfügbare Hauptspeicher. Für die Fehlertoleranz werden alle Aktualisierungen für lokale State-Stores auch in ein Thema im Kafka-Cluster geschrieben. Dies ermöglicht den Nachbau von Staat, indem diese Themen gelesen und alle Daten in RocksDB einfließen. Die neueste Version von Streams API ist 2.8.0.[8] Der Link enthält auch Informationen zum Upgrade auf die neueste Version.[9]
Versionskompatibilität
Bis zu Version 0.9.x sind Kafka -Makler nur mit älteren Kunden kompatibel. Seit Kafka 0.10.0.0 sind Broker auch mit neueren Kunden kompatibel. Wenn ein neuerer Client eine Verbindung zu einem älteren Broker herstellt, kann er nur die Funktionen, die der Broker unterstützt, verwenden. Für die Streams -API beginnt die vollständige Kompatibilität mit der Version 0.10.1.0: A 0.10.1.0 KAFKA -Streams -Anwendung ist nicht mit 0.10.0 oder älteren Brokern kompatibel.
Leistung
Die Überwachung von End-to-End-Leistung erfordert die Nachverfolgung von Makler von Makler, Verbrauchern und Produzenten sowie Überwachung zusätzlich zur Überwachung Zookeeper, was Kafka für die Koordination unter den Verbrauchern verwendet.[10][11] Derzeit gibt es mehrere Überwachungsplattformen, um die Kafka -Leistung zu verfolgen. Zusätzlich zu diesen Plattformen kann das Sammeln von Kafka -Daten auch mit Tools durchgeführt werden, die häufig mit Java, einschließlich der Jconsole.[12]
Siehe auch
- Rabbitmq
- Redis
- Apache Flink
- Apache Samza
- Apache Spark Streaming
- Datenverteilungsdienst
- Unternehmensintegrationsmuster
- Enterprise Messaging System
- Streaming -Analyse
- Ereignisgesteuerte SOA
- HortonWorks DataFlow
- Message orientierte Middleware
- Serviceorientierte Architektur
Verweise
- ^ "Apache Kafka bei Github". github.com. Abgerufen 5. März 2018.
- ^ "Open-Sourcing Kafka, Linkedins verteilte Nachrichtenwarteschlange" LinkedIn ". Abgerufen 27. Oktober 2016.
- ^ https://github.com/apache/kafka/releases/tag/3.2.0; Veröffentlichungsdatum: 9. Mai 2022.
- ^ "Effizienz". kafka.apache.org. Abgerufen 2019-09-19.
- ^ Li, S. (2020). Er verließ seinen hochbezahlten Job bei LinkedIn und baute dann ein 4,5-Milliarden-Dollar-Geschäft in einer Nische, von der Sie noch nie gehört haben. Forbes. Abgerufen am 8. Juni 2021, von FORBES_KREPS.
- ^ "Wie ist die Beziehung zwischen Kafka, dem Schriftsteller und Apache Kafka, dem verteilten Messaging -System?". Quora. Abgerufen 2017-06-12.
- ^ "Was ist Apache Kafka". Confluent.io. Abgerufen 2018-05-04.
- ^ "Apache Kafka". Apache Kafka. Abgerufen 2021-09-10.
- ^ "Apache Kafka". Apache Kafka. Abgerufen 2021-09-10.
- ^ "Überwachung von Kafka -Leistungsmetriken". 2016-04-06. Abgerufen 2016-10-05.
- ^ Mouzakitis, Evan (2016-04-06). "Überwachung von Kafka -Leistungsmetriken". Datadoghq.com. Abgerufen 2016-10-05.
- ^ "Sammeln von Kafka -Leistungsmetriken - Datadog". 2016-04-06. Abgerufen 2016-10-05.