Apache Kafka
Für eine Definition auf hoher Ebene stellen wir eine kurze Definition für Apache Kafka vor:
Apache Kafka ist ein verteiltes, fehlertolerantes, horizontal skalierbares, Commit Log.
Das waren einige hochrangige Wörter über Apache Kafka. Lassen Sie uns die Konzepte hier im Detail verstehen.
Vertikales und horizontales Scailing
Ein Thema in Apache Kafka ist genau wie eine Warteschlange, in der Nachrichten gespeichert werden. Diese Nachrichten werden für eine konfigurierbare Zeit gespeichert und die Nachricht wird erst dann gelöscht, wenn sie von allen bekannten Verbrauchern konsumiert wurde.
Kafka ist skalierbar, da die Verbraucher tatsächlich gespeichert sind, welche Botschaft von ihnen als "Offset" -Werte abgerufen wurde. Schauen wir uns eine Figur an, um dies besser zu verstehen:
Topic -Parion und Verbraucher offset in Apache Kafka
Erste Schritte mit Apache Kafka
Um Apache Kafka zu verwenden, muss es auf dem Computer installiert werden. Lassen Sie dazu Apache Kafka auf Ubuntu lesen.
Stellen Sie sicher.
Wie funktioniert es?
Mit Kafka die Hersteller Bewerbungen veröffentlicht Mitteilungen das kommt in einem Kafka an Knoten und nicht direkt an einen Verbraucher. Aus diesem Kafka -Knoten werden Nachrichten von der verbraucht Verbraucher Anwendungen.
Kafka -Produzent und Verbraucher
Themenpartitionen
Ausdauer der Festplatte
Kafka bestt. Eine Frage, die auftreten könnte, ist, wie dies die Dinge realisierbar und schnell macht? Dafür gab es mehrere Gründe, was es zu einer optimalen Art der Verwaltung der Nachrichtendatensätze macht:
Datenverteilung und Replikation
Wie wir oben untersucht haben, dass ein Thema in Partitionen unterteilt ist, wird jeder Nachrichtendatensatz auf mehreren Knoten des Clusters repliziert, um die Reihenfolge und die Daten jedes Datensatzes zu verwalten, wenn einer der Knoten stirbt.
Auch wenn eine Partition auf mehreren Knoten repliziert wird, gibt es immer noch a Partitionsleiter Knoten, durch den Anwendungen Daten zum Thema lesen und schreiben, und der Anführer repliziert Daten zu anderen Knoten, die als als als als bezeichnete als Anhänger dieser Partition.
Wenn die Datensatzdaten für eine Anwendung von großer Bedeutung sind, kann die Garantie des Nachrichtenaufzeichnungen in einem der Knoten durch Erhöhen des Erhöhen der Knoten erhöht werden Replikationsfaktor des Clusters.
Was ist Zookeeper??
Zookeeper ist ein sehr fehlertoleranter, verteilter Schlüsselwertgeschäft. Apache Kafka hängt stark von Zookeeper ab, um Clustermechaniken wie den Herzschlag zu speichern, Aktualisierungen/Konfigurationen zu verteilen usw.).
Es ermöglicht den Kafka -Brokern, sich selbst zu abonnieren und zu wissen, wann immer eine Änderung in Bezug auf einen Partitionsleiter und eine Knotenverteilung stattgefunden hat.
Produzent und Verbraucheranwendungen kommunizieren direkt mit Zookeeper Anwendung, um zu wissen, welcher Knoten der Partitionsleiter für ein Thema ist, damit er Lese- und Schreibvorgänge des Partitionsleiters ausführen kann.
Streaming
Ein Stream -Prozessor ist eine Hauptkomponente in einem KAFKA -Cluster, der einen kontinuierlichen Strom von Nachrichtenaufzeichnungsdaten aus Eingabethemen annimmt, diese Daten verarbeitet und einen Datenstrom erstellt, um Themen auszugeben, die alles sein können, von Müll bis zu einer Datenbank.
Es ist durchaus möglich, eine einfache Verarbeitung mit der Produzenten-/Verbraucher -APIs direkt durchzuführen. Für komplexe Verarbeitung wie das Kombinieren von Streams bietet Kafka jedoch eine integrierte API -Bibliothek integrierte Streams. Bitte beachten Sie, dass diese API in unserer eigenen Codebasis verwendet werden soll und nicht ' Ich renne auf einem Broker. Es funktioniert ähnlich der Verbraucher -API und hilft uns, die Stream -Verarbeitungsarbeit über mehrere Anwendungen zu skalieren.
Wann soll Apache Kafka verwendet werden?
Wie wir in den obigen Abschnitten untersucht haben, kann Apache Kafka verwendet werden, um eine große Anzahl von Nachrichtenaufzeichnungen zu bewältigen, die zu einer praktisch unendlichen Anzahl von Themen in unseren Systemen gehören können.
Apache Kafka ist ein idealer Kandidat bei der Verwendung eines Dienstes, mit dem wir die ereignisgesteuerte Architektur in unseren Anwendungen befolgen können. Dies ist auf die Funktionen der Datenpersistenz, der fehlertoleranten und hochverteilten Architektur zurückzuführen, bei denen kritische Anwendungen auf ihre Leistung stützen können.
Die skalierbare und verteilte Architektur von Kafka macht die Integration in Microservices sehr einfach und ermöglicht es einer Anwendung, sich mit viel Geschäftslogik zu entkoppeln.
Erstellen eines neuen Themas
Wir können ein Testthema erstellen testen Auf Apache Kafka Server mit dem folgenden Befehl:
Kreatinig ein Thema
Sudo Kafka-Topics.sh-create-Zookeeper localhost: 2181-Replikationsfaktor 1
--Partitionen 1 -topische Tests
Hier ist, was wir mit diesem Befehl zurückbekommen:
Erstellen Sie ein neues Kafka -Thema
KAFKA -Topic -Erstellung Bestätigung
Nachrichten zu einem Thema schreiben
Wie wir bereits studiert haben, ist eine der in Apache Kafka vorhandenen APIs die Produzentapi. Wir werden diese API verwenden, um eine neue Nachricht zu erstellen und zu dem Thema zu veröffentlichen, das wir gerade erstellt haben:
Nachricht zum Thema schreiben
Sudo Kafka-Console-Produzent.SH-BROKER-LIST LOCALHOST: 9092--Topische Tests
Sehen wir uns die Ausgabe für diesen Befehl an:
Veröffentlichen Sie die Nachricht an Kafka -Thema
Meldung eingeben
Lesen von Nachrichten aus dem Thema
Nachdem wir nun eine Nachricht zu dem von uns erstellten Kafka -Thema veröffentlicht haben, ist diese Nachricht für eine konfigurierbare Zeit vorhanden. Wir können es jetzt mit dem lesen Verbraucher -API:
Lesen von Nachrichten aus dem Thema
Sudo Kafka-Console-Consumer.SH -Zookeeper Localhost: 2181 --
Thementests-From-Beinging
Hier ist, was wir mit diesem Befehl zurückbekommen:
Befehl zum Lesen der Nachricht vom Kafka -Thema
Gleichzeitig veröffentlichen und konsumieren
Abschluss
In dieser Lektion haben wir uns angesehen, wie wir Apache Kafka verwenden, was ein hervorragender Message -Broker ist und auch als spezielle Datenpersistenzeinheit fungieren kann.