Apache Kafka und Event-Streaming
Kurz: Kafka ist ein verteiltes, dauerhaft gespeichertes Ereignisprotokoll. Anwendungen hängen Ereignisse hinten an, andere lesen sie in ihrem eigenen Tempo, auch Stunden oder Tage später.
Der Unterschied zur klassischen Warteschlange
Eine Warteschlange löscht eine Nachricht meist, sobald sie abgeholt wurde. Kafka behält sie für eine einstellbare Zeit (oder dauerhaft). Dadurch können mehrere unabhängige Leser dasselbe Protokoll lesen und bei Bedarf von vorn beginnen.
Bausteine
- Topic: ein benannter Strom, zum Beispiel
bestellungen. - Partition: Ein Topic ist in Teile zerlegt (Sharding und Partitionierung). Innerhalb einer Partition gilt eine feste Reihenfolge, über Partitionen hinweg nicht. Der Schlüssel einer Nachricht (etwa die Kunden-ID) bestimmt die Partition, sodass zusammengehörige Ereignisse in Reihenfolge bleiben.
- Offset: die laufende Nummer einer Nachricht in der Partition. Jeder Leser merkt sich, wo er steht.
- Consumer Group: Mehrere Instanzen einer Anwendung teilen sich die Partitionen. Jede Partition wird in einer Gruppe nur von einer Instanz gelesen.
- Replikation: Jede Partition liegt auf mehreren Servern (Replikation: Leader und Follower), fällt einer aus, übernimmt ein anderer.
Typische Einsatzzwecke
Ereignisströme zwischen Microservices, Protokoll- und Messdaten sammeln, Datenbank-Änderungen weitergeben, Echtzeit-Auswertungen. Das Protokoll ist auch Grundlage für Event Sourcing und CQRS.
Garantien und Grenzen
Standard ist „mindestens einmal”: Nach einem Absturz kann eine Nachricht erneut ankommen, Verarbeitung sollte idempotent sein. Genau-einmal-Verarbeitung ist mit Transaktionen möglich, kostet aber Aufwand. Für eine kleine Seite ist Kafka meist zu groß; eine Datenbanktabelle oder ein einfacher Broker genügt.