Analyse von Echtzeit-Streaming-Datenarchitekturen
Apache Kafka ist eine Open-Source-Plattform für die Stream-Verarbeitung. Die Software wurde ursprünglich von LinkedIn entwickelt und in den Programmiersprachen Scala und Java geschrieben. Im Jahre 2011 wurde Kafka ein Teil des Apache-Projekts. Ziel des Projekts ist es, eine einheitliche Plattform mit hohem Durchsatz und geringer Latenz für die Verarbeitung von Echtzeit-Datenfeeds bereitzustellen. Kafka kann sich mit externen Systemen verbinden und bietet mit Kafka Streams eine Stream-Verarbeitung in Java.
Was ist Apache Kafka?
Kafka wird häufig in Echtzeit-Streaming-Datenarchitekturen verwendet, um Echtzeitanalysen bereitzustellen. Laut Entwickler wurde die Software nach dem Autor Franz Kafka benannt, weil sie ein für das Schreiben optimiertes System darstellt. Die Software bietet den Anwendern hauptsächlich drei Funktionen:
- Veröffentlichung und Abonnement von Datenströmen
- Effektives Speichern von Datenströmen
- Verarbeiten von Streams in Echtzeit
Da die Software ein schnelles, skalierbares und fehlertolerantes Publish-Subscribe-Messaging-System ist, wird Kafka in Anwendungsfällen verwendet, in denen die Message-Systeme Java Message Service (JMS), RabbitMQ und AMQP aufgrund des Volumens und der Reaktionsfähigkeit möglicherweise nicht berücksichtigt werden. Kafka bietet höhere Durchsatz- und Zuverlässigkeits-Eigenschaften und eignet sich daher für hohe Daten-Aufkommen, mit denen herkömmliche Message Oriented Middleware (MOM) möglicherweise überfordert ist.
Einige wichtige Kafka-Konzepte
Hersteller
Hersteller sind Anwendungen, die einen Datenstrom zu einem oder mehreren Kafka-Themen veröffentlichen.
Verbraucher
Verbraucher sind die Anwendungen, die Daten aus Kafka-Themen lesen.
Kafka-Broker
Broker werden die Server von Kafka genannt. Sie speichern vom Hersteller bereitgestellte Daten und stellen sie dem Verbraucher zur Verfügung. Kafka-Broker benötigen eine Apache Zookeeper-Bereitstellung, um Konfigurationsdaten, Themenoffsets, Verbrauchergruppen und andere Informationen zu speichern. Kafka repliziert seine Protokolle aus Gründen der Fehlertoleranz über mehrere Server. Jeder Kafka Broker hat eine eindeutige ID (Nummer). Kafka Brokers enthalten Themenprotokollpartitionen.
Kafka-Thema und -Partition
Thema ist ein Datenstrom, der aus einzelnen Datensätzen besteht, und ist im Grunde genommen nur ein vorab geschriebenes Protokoll. Der Produzent hängt Datensätze an diese Protokolle an und der Konsument abonniert Änderungen. Kafka-Themen sind in mehrere Partitionen unterteilt, in denen ein Thema parallelisiert werden kann, indem die Daten in einem bestimmten Thema auf mehrere Broker aufgeteilt werden. Jede Partition kann auf einem separaten Computer platziert werden, damit mehrere Benutzer gleichzeitig von einem Thema lesen können. Außerdem kann ein Thema mehr Daten enthalten, als auf eine Festplatte passen.
Kafka-Cluster
Ein Apache Kafka besteht aus einer Reihe von Brokern, die auf einzelnen Servern ausgeführt werden und von Apache Zookeeper koordiniert werden. Anwender können zunächst einen einzelnen Broker erstellen und weitere hinzufügen, wenn sie ihre Datenerfassungsarchitektur skalieren. Ein Kafka-Cluster kann bei Bedarf 10, 100 oder 1000 Broker in einem Cluster haben. Kafka verwendet Apache Zookeeper, um die Apache Kafka Broker zu warten und zu koordinieren.
Kafka Connect
Connect ist ein Tool, das skalierbare und zuverlässige Streaming von Daten zwischen Apache Kafka und anderen Systemen ermöglicht. Kafka Connect ist eine API, mit denen Kafka problemlos in andere Systeme integriert werden kann, ohne dass Entwickler zusätzlichen Code schreiben müssen.
Für welche Anwendungsbereiche ist die Software gedacht?
Kafka kann mit Flume und Flafka, Spark Streaming, Storm, Hbase, Spark und anderer Software zusammenarbeiten, um Streaming-Daten in Echtzeit aufzunehmen, zu analysieren und zu verarbeiten. Kafka-Broker unterstützen massive Nachrichtenströme zur Analyse von Folgemaßnahmen mit geringer Latenz. Kafka Streaming (ein Teilprojekt) kann für Echtzeit-Analysen verwendet werden.
Wie funktioniert Kafka: Die Grundfunktionen
Apache Kafka basiert auf dem Commit-Datenprotokoll und ermöglicht Benutzern, einen Dienst zu abonnieren und Daten für eine beliebige Anzahl von Systemen oder Echtzeitanwendungen zu veröffentlichen.
Beispiele
Beispielanwendungen sind das Verwalten des Passagier- und Fahrer-Abgleichs bei Uber, oder die Bereitstellung von Echtzeitanalysen und die vorausschauende Wartung eines Smart Homes bei anderen Unternehmen. Mittlerweile wird Kafka von vielen Organisationen auf der ganzen Welt, darunter Netflix, Twitter, Spotify in großem Umfang eingesetzt. Das Software-System hat eine starke, lebendige und offene Community und ist mit einer Vielzahl ergänzender Technologien kompatibel.
Eigenschaften und Besonderheiten von Kafka: Aufbau und Architektur
Kafka ist einfach zu bedienen. Das System ist einzurichten und zu verwenden. Benutzer können schnell erkennen, wie Kafka funktioniert. Der Hauptgrund, warum Kafka sehr beliebt ist, ist seine hervorragende Leistung. Andere Eigenschaften sind: Kafka ist stabil, bietet eine große Zuverlässigkeit und verfügt über eine flexible Publish-Subscribe-Funktion, die sich an die Anzahl der Verbrauchergruppen anpasst. Darüber hinaus funktioniert die Software gut mit Systemen, die zu verarbeitende Datenströme haben, und ermöglicht diesen Systemen das Aggregieren, Transformieren und Laden in andere Systeme. Im Betrieb verlässt sich Kafka stark auf den Betriebssystemkern, um Daten schnell zu übertragen. Mit Kafka können Datensätze in Blöcke gestapelt werden. Diese Datenstapel werden vom Produzenten bis zum Dateisystem (Kafka Topic Log) für den Konsumenten durchgehend angezeigt. Die Stapelverarbeitung ermöglicht eine effizientere Datenkomprimierung und reduziert damit die E/A-Latenz. Auf diese Weise wird eine langsame Suche vermieden. Das ermöglicht dem System, mit massiver Last umzugehen. Kafka wird am häufigsten für das Echtzeit-Streaming von Daten in andere Systeme verwendet. Kafka Core eignet sich nicht für direkte Berechnungen wie Daten-Aggregationen oder CEP. Kafka Streaming, das Teil des Kafka-Ökosystems ist, bietet jedoch die Möglichkeit, Echtzeitanalysen durchzuführen. Mit Kafka können Fast-Lane-Systeme (Echtzeit- und Betriebsdatensysteme) wie Storm, Flink, Spark Streaming gespeist werden. Kafka überträgt Daten für zukünftige Datenanalysen auf BigData-Plattform oder in RDBMS, Cassandra, Spark oder sogar S3. Diese Datenspeicher unterstützen häufig Datenanalyse, Berichterstellung, Data Science Crunching, Compliance-Prüfung und Backups.
Wie nutze ich Kafka in der Cloud?
Mit Amazon Managed Streaming für Apache Kafka (Amazon MSK) und dem Microsoft Azure-Portal können Unternehmen, die die beliebte verteilte Open-Source-Streaming-Plattform verwenden möchten, die Einrichtung, Skalierung und Verwaltung von Kafka-Clustern für die Big-Data-Verarbeitung vereinfachen. Um Apache Kafka zu nutzen müssen die Unternehmen die Software selbst installieren und auf einem Server bereitstellen. Dazu gehört auch die manuelle Konfiguration von Kafka und eines Ausfall-Servers, sowie Server-Patches. Anwender müssen den Cluster auf hohe Verfügbarkeit ausrichten und sicherstellen, dass die Daten dauerhaft gespeichert und gesichert sind. Das schließt die Einrichtung und Überwachung der Alarme sowie eine sorgfältige Planung von Skalierungs-Ereignissen zur Unterstützung von Laständerungen mit ein.
Welche Schnittstellen gibt es?
Kafka Connect (oder Connect API) ist ein Framework zum Importieren und Exportieren von Daten von oder zu anderen Systemen. Es wurde in der Version Kafka 0.9.0.0 hinzugefügt und verwendet intern die Producer- und Consumer-API. Das Connect-Framework selbst führt sogenannte Connectors aus, die die eigentliche Logik zum Lesen und Schreiben von Daten aus anderen Systemen implementieren. Die Connect-API definiert die Programmierschnittstelle, die zum Erstellen eines benutzerdefinierten Connectors implementiert werden muss. Viele Open Source- und kommerzielle Konnektoren für gängige Datensysteme sind bereits verfügbar. Apache Kafka selbst enthält jedoch noch keine serienreifen Konnektoren. Kafka Streams (oder Streams API) ist eine in Java geschriebene Stream-Verarbeitungsbibliothek. Sie wurde in der Version Kafka 0.10.0.0 hinzugefügt. Die Bibliothek ermöglicht die Entwicklung von Stream-Anwendungen, die skalierbar, elastisch und vollständig fehlertolerant sind. Die Haupt-API ist eine Domänen-spezifische Sprache (DSL) für die Stream-Verarbeitung, die Operatoren auf hoher Ebene wie Filter, Zuordnung, Gruppierung, Aggregation und Verknüpfungen bietet. Darüber hinaus kann die Prozessor-API verwendet werden, um benutzerdefinierte Operatoren für einen einfacheren Entwicklungsansatz zu implementieren. Die DSL- und Prozessor-API kann auch zusammen verwendet werden. Für die Stream-Verarbeitung verwendet Kafka Streams RocksDB, um den lokalen Status beizubehalten. Da RocksDB auf die Festplatte schreiben kann, kann der beibehaltene Status größer sein als der verfügbare Hauptspeicher. Aus Gründen der Fehlertoleranz werden alle Aktualisierungen in lokalen Statusspeichern auch in einen Kafka-Cluster geschrieben. Auf diese Weise können Anwender den Status wiederherstellen, indem sie diese Daten in RocksDB einlesen.