Stellen Sie sich einen großen Online-Händler vor, der mehrere Systeme hat, die Daten generieren und konsumieren: eine E-Commerce-Website, eine mobile App, eine Empfehlungs-Engine, ein Bestandsmanagementsystem, eine Versandplattform und eine Kundenanalyseplattform. Jedes dieser Systeme kommuniziert, indem es Ereignisse über Apache-Kafka-Cluster mit Confluent Cloud veröffentlicht und konsumiert und diese Ereignisse in ein Data Warehouse mit Kafka Connect in seiner Datenpipeline streamt.
Jede Aktion auf der Website erzeugt mehrere Ereignisse in den Systemen des Einzelhändlers. Immer wenn ein Kunde eine Bestellung aufgibt, veröffentlicht die Website ein Ereignis OrderCreated
zu einem Kafka-Thema.
Mehrere Downstream-Anwendungen verarbeiten dasselbe Ereignis. Das Bestandssystem reserviert die gekauften Artikel, das Zahlungssystem bestätigt die Transaktion und das Lager beginnt mit der Erfüllung. Die Empfehlungs-Engine aktualisiert die Kundenpräferenzen, die Analyseplattform erfasst den Verkauf und der Kundenbenachrichtigungsdienst versendet eine E-Mail-Bestätigung.
Anfangs enthält das Ereignis OrderCreated
Felder wie order_id
, customer_id
, product_id
, quantity
und total_price
. Alle verbrauchenden Anwendungen sind darauf ausgelegt, diese Struktur zu erwarten.
Stellen Sie sich nun vor, dass das Unternehmen Monate später beschließt, den internationalen Vertrieb zu unterstützen. Entwickler aktualisieren die Website, sodass jede Bestellung nun zwei neue Felder enthält: currency
und exchange_rate
.
Ohne ein Schema-Register gibt es keinen zentralen Mechanismus zur Koordinierung dieser Änderung. Manche Datennutzer von Ereignisdaten erwarten die neuen Felder, andere nicht. Wenn ein Entwickler versehentlich total_price
in order_total
umbenennt oder seinen Datentyp von einer Dezimal- auf eine Zeichenkette ändert, können nachgelagerte Dienste unerwartet ausfallen. Das Lager könnte keine Bestellungen mehr annehmen, Analyse-Dashboards könnten falsche Berichte liefern oder Kundenbenachrichtigungen könnten fehlschlagen, weil sie das Ereignis nicht verarbeiten können.
Wie könnte dasselbe Szenario mit einer Confluent Schema Registry zur Unterstützung der Schemaverwaltung aussehen?
Bevor der aktualisierte Produzent bereitgestellt wird, registriert das Entwicklungsteam eine neue Version des Schemas OrderCreated
. Dadurch wird eine neue Schema-ID generiert, die dem Schema zugeordnet ist. Das Schema-Register überprüft die vorgeschlagenen Änderungen mit den Kompatibilitätseinstellungen des Unternehmens.
Wenn die vorgeschlagenen Änderungen diesen Kompatibilitätsregeln entsprechen, kann die neue Schema-Version registriert werden. Verstößt eine Änderung gegen die konfigurierte Kompatibilitätsrichtlinie, kann das Register sie ablehnen, bevor Anwendungen das inkompatible Schema verwenden.
Dies bedeutet, dass Entwickler eine fehlerhafte Schemaänderung während der Entwicklung und nicht erst nach der Bereitstellung entdecken können. Bestehende Kunden können mit kompatiblen Änderungen weiterhin arbeiten, während die Entwicklerteams ihre Anwendungen schrittweise aktualisieren können, um die neuen Felder zu nutzen, sobald sie bereit sind.