In dieser Lektion werden wir sehen, was Apache Kafka ist und wie es zusammen mit seinen häufigsten Anwendungsfällen funktioniert. Apache Kafka wurde ursprünglich 2010 bei LinkedIn entwickelt und wurde 2012 zu einem Apache-Projekt auf höchster Ebene. Es hat drei Hauptkomponenten:
- Publisher-Abonnent: Diese Komponente ist für die effiziente Verwaltung und Bereitstellung von Daten über die Kafka-Knoten und Verbraucheranwendungen verantwortlich, die stark skalieren (wie buchstäblich).
- Connect-API: Die Connect API ist die nützlichste Funktion für Kafka und ermöglicht die Kafka-Integration mit vielen externen Datenquellen und Datensenken.
- Kafka-Bäche: Mit Kafka Streams können wir die Verarbeitung eingehender Daten in großem Maßstab in nahezu Echtzeit in Betracht ziehen.
Wir werden in den kommenden Abschnitten noch viel mehr Kafka-Konzepte studieren. Lass uns vorangehen.
Apache Kafka-Konzepte
Bevor wir tiefer graben, müssen wir uns mit einigen Konzepten in Apache Kafka auseinandersetzen. Hier sind die Begriffe, die wir kennen sollten, ganz kurz:
-
- Produzent: Dies ist eine Anwendung, die eine Nachricht an Kafka . sendet
- Verbraucher: Dies ist eine Anwendung, die Daten von Kafka . verbraucht
- Botschaft: Daten, die von der Herstelleranwendung an die Verbraucheranwendung über Kafka . gesendet werden
- Verbindung: Kafka stellt TCP-Verbindung zwischen dem Kafka-Cluster und den Anwendungen her
- Thema: Ein Thema ist eine Kategorie, an die gesendete Daten gekennzeichnet und an interessierte Verbraucheranwendungen geliefert werden
- Themenaufteilung: Da ein einzelnes Thema viele Daten auf einmal erhalten kann, ist jedes Thema in Partitionen unterteilt, um Kafka horizontal skalierbar zu halten, und jede Partition kann auf jeder Knotenmaschine eines Clusters leben. Versuchen wir es vorzustellen:
Themenpartitionen
- Repliken: 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 beizubehalten, falls einer der Knoten stirbt.
- Verbrauchergruppen: Mehrere Verbraucher, die sich für das gleiche Thema interessieren, können in einer Gruppe zusammengefasst werden, die als Verbrauchergruppe bezeichnet wird
- Versatz: Kafka ist skalierbar, da die Konsumenten tatsächlich speichern, welche Nachricht von ihnen zuletzt als 'Offset'-Wert abgerufen wurde. Dies bedeutet, dass für das gleiche Thema der Offset von Consumer A einen Wert von 5 haben könnte, was bedeutet, dass er als nächstes das sechste Paket verarbeiten muss, und für den Consumer B könnte der Offset-Wert 7 sein, was bedeutet, dass er als nächstes das achte Paket verarbeiten muss. Dadurch wurde die Abhängigkeit vom Thema selbst für die Speicherung dieser Metadaten zu jedem Verbraucher vollständig beseitigt.
- Knoten: Ein Knoten ist eine einzelne Servermaschine im Apache Kafka-Cluster.
- Cluster: Ein Cluster ist eine Gruppe von Knoten i.e., eine Gruppe von Servern.
Das Konzept für Topic, Topic Partitions und Offset lässt sich auch mit einer anschaulichen Abbildung verdeutlichen:
Themenaufteilung und Consumer-Offset in Apache Kafka
Apache Kafka als Publish-Subscribe-Messaging-System
Bei Kafka veröffentlichen die Producer-Anwendungen Nachrichten, die an einem Kafka-Knoten und nicht direkt an einem Verbraucher ankommen. Von diesem Kafka-Knoten werden Nachrichten von den Verbraucheranwendungen konsumiert.
Kafka Produzent und Konsument
Da ein einzelnes Thema viele Daten auf einmal erhalten kann, ist Kafka horizontal skalierbar, jedes Thema ist unterteilt in Partitionen und jede Partition kann auf jeder Knotenmaschine eines Clusters leben.
Auch hier führt Kafka Broker keine Aufzeichnungen darüber, welcher Verbraucher wie viele Datenpakete verbraucht hat. Es ist der Verantwortung des Verbrauchers, den Überblick über die von ihm verbrauchten Daten zu behalten. Da Kafka die Bestätigungen und Nachrichten jeder Verbraucheranwendung nicht nachverfolgt, kann es viel mehr Verbraucher mit vernachlässigbaren Auswirkungen auf den Durchsatz verwalten. In der Produktion folgen viele Anwendungen sogar einem Muster von Batch-Consumern, was bedeutet, dass ein Consumer alle Nachrichten in einer Warteschlange in regelmäßigen Zeitabständen konsumiert.
Installation
Um Apache Kafka verwenden zu können, muss es auf dem Computer installiert sein. Lesen Sie dazu Apache Kafka unter Ubuntu installieren.
Anwendungsfall: Tracking der Website-Nutzung
Kafka ist ein hervorragendes Tool, wenn wir die Aktivität auf einer Website verfolgen müssen. Die Tracking-Daten umfassen unter anderem Seitenaufrufe, Suchen, Uploads oder andere Aktionen, die Benutzer ausführen können. Wenn sich ein Benutzer auf einer Website befindet, kann der Benutzer beim Surfen durch die Website eine Reihe von Aktionen ausführen.
Wenn sich beispielsweise ein neuer Benutzer auf einer Website anmeldet, kann die Aktivität verfolgt werden, in welcher Reihenfolge ein neuer Benutzer die Funktionen einer Website erkundet, wenn der Benutzer sein Profil nach Bedarf einstellt oder es vorzieht, direkt auf die Funktionen der Website zuzugreifen Webseite. Immer wenn der Benutzer auf eine Schaltfläche klickt, werden die Metadaten für diese Schaltfläche in einem Datenpaket gesammelt und an den Kafka-Cluster gesendet, von wo aus der Analysedienst für die Anwendung diese Daten sammeln und nützliche Einblicke in die zugehörigen Daten liefern kann. Wenn wir die Aufgaben in Schritte unterteilen möchten, sieht der Prozess wie folgt aus:
- Ein Benutzer registriert sich auf einer Website und betritt das Dashboard. Der Benutzer versucht sofort auf eine Funktion zuzugreifen, indem er mit einer Schaltfläche interagiert.
- Die Webanwendung erstellt eine Nachricht mit diesen Metadaten zu einer Themenpartition des Themas „Klick“.
- Die Nachricht wird an das Commit-Protokoll angehängt und der Offset wird erhöht
- Der Verbraucher kann jetzt die Nachricht vom Kafka-Broker abrufen und die Website-Nutzung in Echtzeit anzeigen und vergangene Daten anzeigen, wenn er seinen Offset auf einen möglichen früheren Wert zurücksetzt
Anwendungsfall: Nachrichtenwarteschlange
Apache Kafka ist ein hervorragendes Tool, das als Ersatz für Message-Broker-Tools wie RabbitMQ fungieren kann. Asynchrones Messaging hilft bei der Entkopplung der Anwendungen und schafft ein hochskalierbares System.
Genau wie beim Konzept von Microservices können wir, anstatt eine große Anwendung zu erstellen, die Anwendung in mehrere Teile aufteilen und jeder Teil hat eine ganz spezifische Verantwortung. Auf diese Weise können die verschiedenen Teile auch in völlig unabhängigen Programmiersprachen geschrieben werden! Kafka verfügt über ein integriertes Partitionierungs-, Replikations- und Fehlertoleranzsystem, das es zu einem großen Message-Broker-System macht.
In letzter Zeit wird Kafka auch als eine sehr gute Lösung für die Protokollsammlung angesehen, die den Server-Broker für die Protokolldateisammlung verwalten und diese Dateien einem zentralen System zur Verfügung stellen kann. Mit Kafka ist es möglich, jedes Ereignis zu generieren, von dem jeder andere Teil Ihrer Anwendung wissen möchte.
Verwendung von Kafka bei LinkedIn
Es ist interessant festzustellen, dass Apache Kafka früher als Möglichkeit gesehen und verwendet wurde, Datenpipelines konsistent zu machen und Daten in Hadoop aufzunehmen. Kafka funktionierte hervorragend, wenn mehrere Datenquellen und -ziele vorhanden waren und ein separater Pipeline-Prozess für jede Kombination von Quelle und Ziel nicht möglich war. Der Kafka-Architekt von LinkedIn, Jay Kreps, beschreibt dieses bekannte Problem in einem Blogbeitrag gut:
Meine eigene Beteiligung daran begann etwa 2008, nachdem wir unseren Key-Value-Store ausgeliefert hatten. Mein nächstes Projekt bestand darin, zu versuchen, ein funktionierendes Hadoop-Setup zum Laufen zu bringen und einige unserer Empfehlungsprozesse dorthin zu verlegen. Da wir in diesem Bereich wenig Erfahrung haben, haben wir natürlich ein paar Wochen für das Ein- und Auslesen von Daten eingeplant und den Rest unserer Zeit für die Implementierung ausgefallener Vorhersagealgorithmen. So begann ein langer Slog.
Apache Kafka und Flume
Wenn Sie diese beiden anhand ihrer Funktionen vergleichen, werden Sie viele Gemeinsamkeiten finden. Hier sind einige davon:
- Es wird empfohlen, Kafka zu verwenden, wenn mehrere Anwendungen die Daten verbrauchen, anstelle von Flume, das speziell für die Integration in Hadoop entwickelt wurde und nur zum Einlesen von Daten in HDFS und HBase verwendet werden kann. Flume ist für HDFS-Operationen optimiert.
- Bei Kafka ist es ein Nachteil, die Hersteller- und Verbraucheranwendungen codieren zu müssen, während es bei Flume viele integrierte Quellen und Senken hat. Das bedeutet, dass es Ihnen empfohlen wird, Flume selbst zu verwenden, wenn vorhandene Anforderungen mit den Flume-Funktionen übereinstimmen, um Zeit zu sparen.
- Flume kann Daten während des Fluges mit Hilfe von Abfangvorrichtungen verbrauchen. Es kann für die Datenmaskierung und -filterung wichtig sein, während Kafka ein externes Stream-Verarbeitungssystem benötigt.
- Es ist für Kafka möglich, Flume als Verbraucher zu verwenden, wenn wir Daten in HDFS und HBase aufnehmen müssen. Das bedeutet, dass Kafka und Flume sich wirklich gut integrieren.
- Kakfa und Flume können mit der richtigen Konfiguration null Datenverlust garantieren, was ebenfalls leicht zu erreichen ist. Dennoch, um darauf hinzuweisen, dass Flume keine Ereignisse repliziert, was bedeutet, dass wir den Ereigniszugriff verlieren, wenn einer der Flume-Knoten ausfällt, bis die Festplatte wiederhergestellt ist
Fazit
In dieser Lektion haben wir uns viele Konzepte zu Apache Kafka angesehen. Lesen Sie hier mehr auf Kafka basierende Beiträge.