Apache Kafka
Data EngineeringApache Kafka7 Min. Lesezeit

Wie funktioniert Stream Processing mit Apache Kafka in der Praxis?

Direkte Antwort

Kafka speichert Ereignisse als geordnetes, persistentes Log in sogenannten Topics, wobei Produzenten Ereignisse schreiben, ohne zu wissen, wer sie konsumiert, und Konsumenten Ereignisse in ihrem eigenen Tempo lesen können, auch rückwirkend. Diese Entkopplung erlaubt es, mehrere unabhängige Systeme mit denselben Ereignisdaten zu versorgen, ohne dass Produzent und Konsument direkt miteinander verbunden sein müssen.

"

Eine klassische Message Queue liefert eine Nachricht einmal aus und vergisst sie dann. Kafka behält das Ereignis, sodass ein neuer Konsument auch Wochen später von vorne lesen kann.

Der zentrale Unterschied zwischen Kafka und klassischer Message-Queue-Software liegt darin, dass Kafka Nachrichten nach dem Konsum nicht löscht, sondern als durchsuchbares, wiederholbar lesbares Log vorhält.

Topics, Partitionen und das Log-Prinzip

Kafka organisiert Ereignisse in Topics, die intern in mehrere Partitionen aufgeteilt sind, um parallele Verarbeitung und horizontale Skalierung zu ermöglichen — jede Partition ist dabei ein geordnetes, unveränderliches Log von Ereignissen.

Diese Partitionierung erlaubt es, sehr hohe Durchsatzraten zu erreichen, weil unterschiedliche Partitionen unabhängig voneinander von verschiedenen Konsumenten-Instanzen parallel verarbeitet werden können.

Entkopplung von Produzenten und Konsumenten

Ein Produzent schreibt Ereignisse in ein Topic, ohne zu wissen oder sich darum zu kümmern, welche und wie viele Konsumenten diese Ereignisse später lesen — mehrere unabhängige Systeme (etwa ein Analytics-System und ein Benachrichtigungsdienst) können dasselbe Ereignis unabhängig voneinander konsumieren.

Diese Entkopplung reduziert die architektonische Komplexität erheblich gegenüber direkten Punkt-zu-Punkt-Integrationen zwischen vielen Systemen, weil jedes System nur mit Kafka statt mit jedem einzelnen anderen System integrieren muss.

Wiederholbare Verarbeitung durch persistentes Log

Weil Kafka Ereignisse für eine konfigurierbare Zeitspanne (oder unbegrenzt) speichert statt sie nach dem Konsum zu löschen, kann ein neuer Konsument, der später hinzukommt, historische Ereignisse von Beginn an erneut verarbeiten.

Diese Eigenschaft ist besonders wertvoll, wenn ein neues System eingeführt wird, das auf denselben historischen Ereignissen aufbauen soll wie bereits bestehende Systeme, ohne dass diese Ereignisse aus einer anderen Quelle erneut beschafft werden müssen.

Wann passt es — wann nicht?

Passt gut

  • Mehrere unabhängige Systeme sollen auf denselben Ereignisdaten aufbauen, teils auch rückwirkend

Passt nicht

  • Es gibt nur eine einzelne, einfache Punkt-zu-Punkt-Kommunikation zwischen zwei Systemen