© Excellent backgrounds/Shutterstock.com
Strukturierte Daten in Kafka mit Apache Avro und der Schema Registry

Kafka 101


Bei der Definition von Schnittstellen ist die Spezifizierung von Datenstrukturen ein wichtiges Thema. Eine falsche Wahl kann später schnell zu Problemen führen, und obwohl man eine lose Kopplung von Komponenten geplant hat, trotzdem zu starken Abhängigkeiten und somit in einem hohen Koordinationsaufwand resultieren. Das übliche Nutzungsverhalten von Apache Kafka, bei dem Nachrichten einmalig publiziert und anschließend mehrfach konsumiert werden, kann diesen Effekt zusätzlich verstärken und bei Formaten mit suboptimaler Leseperformance den negativen Einfluss auf die Performance multiplizieren.

Kafka stellt mit der Schema Registry ein zentrales REST-API für die Abfrage und Verwaltung aktueller, sowie historischer Definitionen von Datenstrukturen, deren Avro-Schema, zur Verfügung. Nach einer kurzen Einführung in Avro wird gezeigt, wie mithilfe der Schema Registry Avro-Schemas definiert und ausgetauscht werden können. Im Folgenden wird im Rahmen dieses Artikels auf die Vorteile einer zentralen Schemaverwaltung eingegangen und die einseitige Evolution eines Schemas gezeigt, bei der sich der Producer oder Consumer weiterentwickelt und der jeweilige Gegenpart davon nicht negativ beeinflusst wird.

Serialisierung

Zur Übertragung über das Netzwerk oder zur Persistierung von Daten ist es notwendig, diese zu serialisieren, d. h., strukturierte Daten in einen sequenziellen Datenstrom zu überführen. Zum Empfangen bzw. Auslesen des Datenstroms muss dieser anschließend wieder in eine strukturierte Datenform umgewandelt werden. In der Praxis bedeutet dies oft, dass eine Domäne auf der einen Seite mit Metainformationen in Code und Persistenzsystem abgebildet wird, hier also inhärent das Schema präsent ist und auf der anderen Seite während der Datenübertragung schemalose Formate wie JSON zum Einsatz kommen. Dies kann bei verteilten Systemen schnell zu Problemen führen, da sich unter Umständen nur in Teilen des Systems die Datenstruktur ändert (beispielsweise beim testweisen Ausrollen von Upgrades auf einzelnen Knoten). Schemalose Formate bergen die Gefahr, dass durch mangelhafte Dokumentation und Beschreibung der Daten Informationen bei der Übertragung verlorengehen bzw. unbrauchbar werden oder auch Inkompatibilitäten erzeugt werden. Formate mit Schema wie bspw. XML adressieren das erste Problem – die Gefahr der auftretenden Inkompatibilität bei Veränderungen in Teilen des Systems bleibt jedoch bestehen.

Zusammenfassend beschreibt Martin Kleppmann vier „Evolutionsphasen“...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang