Was ist Apache Kafka?

14.03.2022
Von 
Martin Heller schreibt als freier Autor für die Schwesterpublikation InfoWorld.
Apache Kafka ist eine der ausgereiftesten Plattformen für Event Streaming. Das müssen Sie wissen.
Geht es um Event Streaming, führt kaum ein Weg an Apache Kafka vorbei. Lesen Sie, was die Plattform ausmacht.
Geht es um Event Streaming, führt kaum ein Weg an Apache Kafka vorbei. Lesen Sie, was die Plattform ausmacht.
Foto: shuttersv - shutterstock.com

Alle Daten in einem Data Warehouse zu speichern und über Nacht per Batch-Prozess zu analysieren reicht nicht mehr aus, um ein Business oder einen Prozess zeitnah zu monitoren und zu managen. Stattdessen empfehlen sich Realtime-Analysen von Datenströmen und das Speichern der wirklich relevanten Daten für eine nachgelagerte Analyse. Apache Kafka, das ursprünglich bei LinkedIn entwickelt wurde, ist eine der ausgereiftesten Plattformen für Event-Streaming. Zu den Ergänzungen für Kafka gehören:

Zu den Kafka-Alternativen zählen:

Apache Kafka - Definition

Apache Kafka ist eine verteilte, quelloffene Java/Scala-Event-Streaming-Plattform für High-Performance-Datenpipelines, Streaming-Analysen, Datenintegration und unternehmenskritische Anwendungen. Kafka-Events werden in Topics organisiert und dauerhaft gespeichert.

Kafka verfügt über fünf Kern-APIs:

  • Über die Admin-API werden Topics, Brokers und andere Kafka-Objekte gemanagt und überprüft.

  • Über die Producer-API wird ein Event Stream in einem oder mehreren Topics veröffentlicht (write).

  • Über die Consumer-API werden eines oder mehrere Topics abonniert (read) und die für sie produzierten Ereignisströme verarbeitet.

  • Über die Streams-API werden Stream-Processing-Applikationen und Microservices implementiert. Sie bietet Funktionen auf höherer Ebene, um Event Streams zu verarbeiten - einschließlich Transformationen, zustandsbehafteter Operationen wie Aggregationen und Joins oder Windowing. Eingaben werden aus einem oder mehreren Topics gelesen, um entsprechende Outputs zu generieren. Die Input Streams werden effektiv in Output Streams transformiert.

  • Über die Connect-API werden wiederverwendbare Datenimport-/Export-Konnektoren erstellt und ausgeführt, die Event-Ströme von und zu externen Systemen und Anwendungen konsumieren (read) oder produzieren (write), um sie in Krafka integrieren zu können. Ein Konnektor zu einer relationalen Datenbank wie PostgreSQL könnte zum Beispiel jede Änderung in einer Reihe von Tabellen erfassen. In der Praxis müssen Sie jedoch in der Regel keine eigenen Konnektoren implementieren, da die Kafka-Community bereits Hunderte von gebrauchsfertigen Konnektoren bereitstellt.

Wenn Sie Stream Processing implementieren möchten, das für die Streams-API zu komplex ist, können Sie Kafka mit Apache Samza (dazu später mehr) oder Apache Flink integrieren. Ein Nachteil von Apache Kafka ist, dass es schwierig sein kann, große Kafka-Cluster einzurichten. Dieses Problem beheben kommerzielle Cloud-Implementierungen von Apache Kafka, wie beispielsweise Confluent Cloud und Amazon Managed Streaming for Apache Kafka - allerdings hat das auch seinen Preis.

Apache Kafka - Architektur

Kafka ist ein verteiltes System, das aus Servern und Clients besteht, die über ein TCP-Netzwerkprotokoll kommunizieren. Es lässt sich auf Bare-Metal-Hardware, virtuellen Maschinen und Containern sowie On-Premises wie auch in Cloud-Umgebungen einsetzen.

Server: Kafka wird als Cluster betrieben, das aus einem oder mehreren Servern besteht, die sich wiederum über mehrere Rechenzentren oder Cloud-Regionen erstrecken können. Einige dieser Server bilden die Speicherebene, genannt "Brokers". Andere Server führen Kafka Connect aus, um kontinuierlich Daten als Event-Ströme zu importieren und zu exportieren und Kafka mit Ihren bestehenden Systemen wie relationalen Datenbanken sowie anderen Kafka-Clustern zu integrieren. Um geschäftskritische Use Cases umsetzen zu können, ist ein Kafka-Cluster skalierbar und fehlertolerant angelegt: Fällt einer der Server aus, übernehmen die anderen dessen Arbeit und gewährleisten einen kontinuierlichen Betrieb ohne Datenverlust.

Clients: Mit Kafka-Clients können Sie verteilte Anwendungen und Microservices erstellen, die Ereignisströme parallel und fehlertolerant lesen, schreiben und verarbeiten - selbst wenn es zu Netzwerkproblemen oder Maschinenausfällen kommt. Kafka wird mit einigen Clients ausgeliefert, die durch viele weitere aus der Kafka-Community ergänzt werden. Kafka-Clients gibt es für Java und Scala, einschließlich der übergeordneten Kafka-Streams-Bibliothek, sowie für Go, Python, C/C++, viele andere Programmiersprachen und REST-APIs.

Apache Samza - im Zusammenspiel mit Kafka

Apache Samza ist ein quelloffenes, Scala/Java-basiertes, verteiltes Stream-Processing-Framework, das bei LinkedIn in Verbindung mit Kafka entwickelt wurde. Mit Samza lassen sich zustandsbehaftete Anwendungen erstellen, die Daten in Echtzeit aus mehreren Quellen verarbeiten - einschließlich Apache Kafka. Zu den wesentlichen Merkmalen von Samza gehören:

  • Unified API: Eine einfache API zur Beschreibung der Anwendungslogik, unabhängig von der Datenquelle. Die gleiche API kann sowohl Batch- als auch Streaming-Daten verarbeiten.

  • Pluggability auf jeder Ebene: Samza bietet Integrationen mit Apache Kafka, AWS Kinesis, Azure Event Hubs (Azure-natives Kafka as a Service), Elasticsearch und Apache Hadoop. Auch die Integration mit eigenen Quellen soll sich einfach gestalten lasen.

  • Samza als Embedded Library: Samza lässt sich als leichtgewichtige Client-Bibliothek einsetzen, die in Java/Scala-Anwendungen eingebettet ist. Integrieren Sie Samza in Ihre bestehenden Anwendungen, können Sie darauf verzichten, ein separates Cluster für Stream Processing einzurichten und zu betreiben.

  • Einmal schreiben, überall ausführen: Flexible Bereitstellungsoptionen, um Anwendungen überall auszuführen - von öffentlichen Clouds über containerisierte Umgebungen bis hin zu Bare-Metal-Hardware.

  • Samza als Managed Service: Nutzen Sie die Stream-Verarbeitung als Managed Service, indem Sie sie in gängige Cluster-Manager wie Apache YARN integrieren.

  • Fehlertoleranz: Samza unterstützt Host-Affinität und inkrementelles Checkpointing, um eine schnelle Wiederherstellung nach Ausfällen zu ermöglichen. Aufgaben und deren Status werden transparent migriert.

  • Skalierbarkeit: Samza kommt bei mehreren großen Unternehmen wie LinkedIn, Uber, TripAdvisor und Slack zum Einsatz - ist also leistungserprobt im Umgang mit anspruchsvollen Anwendungen.

Apache Kafka - Confluent und Hyperscaler

Confluent ist eine kommerzielle Version von Apache Kafka, die sowohl On-Premises als auch in der Cloud angeboten wird. Confluent Cloud wurde von Grund auf neu entwickelt und als Serverless, Elastic, Cloud-nativer Managed Service konzipiert. Confluent läuft auf Amazon Web Services, Microsoft Azure und Google Cloud Platform.

  • Amazon Managed Streaming für Apache Kafka (MSK) koexistiert mit Confluent Cloud und Amazon Kinesis auf AWS. Alle drei erbringen im Wesentlichen den gleichen Dienst.

  • Auf Microsoft Azure koexistieren Apache Kafka auf HDInsight und Confluent Cloud mit Azure Event Hubs und Azure Stream Analytics.

  • In der Google Cloud werden Google Cloud Dataflow, Google Cloud Dataproc, Google Cloud Pub/Sub und Google Cloud BigQuery neben Confluent Cloud angeboten.

Apache Kafka - Use Cases

Tencent nutzte Kafka zum Aufbau von Datenpipelines für die regionsübergreifende Log-Ingestion, für maschinelle Lernplattformen und für die asynchrone Kommunikation zwischen Microservices. Weil Tencent einen höheren Durchsatz und eine geringere Latenz benötigte, als sie von einem einzelnen Kafka-Cluster erreicht werden kann, wurden die Kafka-Cluster in eine Proxy-Schicht verpackt. So wurde ein föderiertes Kafka-Design geschaffen, das mehr als zehn Billionen Nachrichten pro Tag mit einer maximalen Cluster-Bandbreite von 240 Gb/s verarbeitet.

Microsoft Azure hat einen Prototyp einer End-to-End-Lösung für die IoT-Datenverarbeitung mit Confluent Cloud, MQTT-Brokern und Konnektoren, dem analytischen Speicher von Azure Cosmos DB, Azure Synapse Analytics und Azure Spring Cloud erstellt.

ACERTUS hat mit Confluent Cloud, ksqlDB (einer SQL-Datenbank, die auf Streaming-Daten spezialisiert ist), AWS Lambda und einem Snowflake Data Warehouse ein End-to-End-System für die Verwaltung von Fahrzeugflotten aufgebaut. Laut ACERTUS hat dieses System im ersten Jahr mehr als zehn Millionen Dollar Umsatz generiert. (fm)

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.