Wie wird Schema Evolution in Apache Avro technisch gelöst, ohne die Abwärtskompatibilität zu gefährden?
Schema Evolution in Apache Avro basiert auf der technischen Trennung von Writer-Schema und Reader-Schema. Beim Deserialisieren eines Datensatzes liegen der Avro-Bibliothek beide Schemata vor: das Schema, mit dem die Daten geschrieben wurden (Writer-Schema), und das Schema, das die Anwendung aktuell zur Verarbeitung nutzt (Reader-Schema). Die sogenannte Schema-Resolution gleicht diese beiden Versionen ab und mappt die Felder entsprechend.
Damit die Abwärtskompatibilität gewahrt bleibt, muss ein Reader mit einem neuen Schema in der Lage sein, Daten zu verarbeiten, die mit einer älteren Version geschrieben wurden. Dies wird durch die strikte Einhaltung folgender Regeln erreicht:
| Änderungstyp | Bedingung für Abwärtskompatibilität | Technisches Verhalten |
|---|---|---|
| Feld hinzufügen | Default-Wert muss definiert sein | Der Reader nutzt den Default-Wert, wenn das Feld in den alten Daten fehlt. |
| Feld entfernen | Feld muss einen Default-Wert gehabt haben | Der Reader ignoriert das Feld im Writer-Schema einfach. |
| Typ ändern | Nur kompatible Promotionen (z. B. int $\rightarrow$ long) | Avro konvertiert den Datentyp während der Resolution automatisch. |
| Namensänderung | Nutzung von Aliassen im Reader-Schema | Das Feld wird über den Alias korrekt dem neuen Namen zugeordnet. |
In produktiven Systemen implementieren wir zur Verwaltung dieser Schemata eine zentrale Schema Registry. Anstatt das vollständige Schema an jede Nachricht anzuhängen, wird lediglich eine kompakte Schema-ID übertragen. Der Reader ruft das zugehörige Writer-Schema über diese ID aus der Registry ab und führt den Abgleich mit seinem lokalen Reader-Schema durch. Dieser Prozess verhindert Datenverlust und Laufzeitfehler bei der Evolution von Datenstrukturen.
Die Integration solcher Mechanismen ist ein Kernbestandteil unserer IT-Consulting & Digitale Strategie, um hochverfügbare Event-Driven Architectures zu realisieren. Ohne die Definition von Default-Werten führt jede Schema-Änderung zu einem Bruch der Kompatibilität, was in verteilten Systemen unmittelbar zu Fehlern in den Consumer-Services führt.
Wir empfehlen die konsequente Nutzung einer Schema Registry in Verbindung mit einer automatisierten "Backward"-Kompatibilitätsprüfung im CI/CD-Prozess, da manuelle Prüfungen bei einer steigenden Anzahl an Microservices unweigerlich zu inkonsistenten Datenzuständen führen.
Andere Fragen in dieser Kategorie
Andere Nutzer suchten auch nach:
Diese Fragen könnten Sie ebenfalls interessieren.
Inwiefern optimiert der Tungsten-Engine in Spark die Speicherverwaltung durch Binary Layouts und Unsafe-Operationen?
data-engineeringInwiefern unterscheidet sich das Z-Ordering von herkömmlichem Hive-Partitioning hinsichtlich der Data-Skipping-Effizienz?
data-engineeringWas ist der technische Unterschied zwischen 'At-least-once' und 'Exactly-once' Delivery in Kafka-Producer-Konfigurationen?
data-engineeringWas ist der technische Unterschied zwischen einer 'Push-based' und einer 'Pull-based' Orchestrierung in Prefect oder Dagster?
data-engineeringWas ist der technische Unterschied zwischen einer Broadcast Hash Join und einem Sort Merge Join in verteilten Systemen?