<EbeneX/>
Daten · Updated 3. Juli 2026

Schema Evolution

Definition

Die Fähigkeit, Datenschemata zu ändern, ohne bestehende Daten oder Anwendungen zu brechen – essentiell für langlebige Datensysteme.

Fortgeschritten 3 Min. Lesezeit EN: Schema Evolution

Einfach erklärt

Schema Evolution erlaubt Änderungen an Datenstrukturen, ohne alles kaputt zu machen.

Kompatibilitätstypen:

TypBedeutung
BackwardNeuer Code liest alte Daten
ForwardAlter Code liest neue Daten
FullBeides

Technischer Deep Dive

Sichere Änderungen

✅ Sicher:
- Feld hinzufügen (mit Default)
- Optionales Feld hinzufügen
- Alias für Feld

❌ Unsicher:
- Pflichtfeld entfernen
- Typ ändern (int → string)
- Feld umbenennen

Avro Schema Evolution

// Version 1
{
  "type": "record",
  "name": "User",
  "fields": [
    {"name": "id", "type": "int"},
    {"name": "name", "type": "string"}
  ]
}

// Version 2 (backward compatible)
{
  "type": "record",
  "name": "User",
  "fields": [
    {"name": "id", "type": "int"},
    {"name": "name", "type": "string"},
    {"name": "email", "type": ["null", "string"], "default": null}
  ]
}

Kompatibilität richtig herum denken

Die Begriffe Backward und Forward werden leicht verwechselt. Eine Merkhilfe: Die Richtung bezieht sich immer auf den Reader.

SzenarioBenötigte Kompatibilität
Consumer wird zuerst aktualisiert, Producer späterBackward: neuer Reader muss alte Events verstehen
Producer wird zuerst aktualisiert, Consumer späterForward: alter Reader muss neue Events tolerieren
Deployment-Reihenfolge unklar oder gemischtFull: beide Richtungen absichern

In Event-Streaming-Systemen mit vielen unabhängigen Teams ist Full Compatibility die sicherste Wahl – sie schränkt die erlaubten Änderungen zwar am stärksten ein (praktisch nur optionale Felder mit Default), verhindert aber Deployment-Abhängigkeiten zwischen Teams.

Umbenennen und Typänderungen: der Zwei-Schritte-Trick

Breaking Changes lassen sich oft in mehrere kompatible Schritte zerlegen. Statt ein Feld direkt umzubenennen:

Schritt 1: Neues Feld mit neuem Namen hinzufügen (mit Default),
           Producer schreibt beide Felder parallel
Schritt 2: Alle Consumer auf das neue Feld migrieren
Schritt 3: Altes Feld als deprecated markieren,
           später in einer Major-Version entfernen

Dasselbe Muster funktioniert für Typänderungen: neues Feld mit neuem Typ einführen, doppelt schreiben, Consumer migrieren, altes Feld abkündigen. Das dauert länger als ein harter Schnitt, vermeidet aber koordinierte Big-Bang-Deployments.

Schema Registry in der Praxis

Eine Schema Registry prüft neue Schema-Versionen automatisch gegen die konfigurierte Kompatibilitätsregel, bevor sie akzeptiert werden. Producer und Consumer referenzieren Schemas über eine ID statt sie mitzuschicken – das spart Speicherplatz pro Nachricht und macht die Registry zur zentralen Wahrheitsquelle. Wichtig ist, die Kompatibilitätsprüfung zusätzlich in die CI-Pipeline einzubauen: Ein inkompatibles Schema soll den Build brechen, nicht erst das Deployment.

Typische Fehler in der Praxis

FehlerFolge
Pflichtfeld ohne Default hinzufügenAlte Daten lassen sich mit neuem Schema nicht mehr lesen
Feld löschen und Namen später wiederverwendenAlte Daten werden mit falscher Semantik interpretiert
Enum-Werte entfernenAlte Events mit dem entfernten Wert brechen Consumer
Kompatibilitätsmodus auf NONE stellen, „um schnell zu liefern”Breaking Changes rutschen unbemerkt durch
Schemas nur in der Registry, nicht im Code-RepositoryKein Review-Prozess, keine Historie für Änderungen

Als Grundregel gilt: Jede Schema-Änderung wie eine API-Änderung behandeln – mit Review, Versionierung und der Frage, wer die Daten in fünf Jahren noch lesen können muss. Gerade in Data Lakes liegen Parquet- oder Avro-Dateien oft Jahre unverändert; das Schema von heute muss auch für die Daten von damals funktionieren.

Schema Evolution ist wie ein Haus umbauen, während du drin wohnst: Du fügst Zimmer hinzu oder änderst Wände, aber das Haus bleibt bewohnbar.

Backward Compatible: Neue Reader lesen alte Daten

Forward Compatible: Alte Reader lesen neue Daten

Wichtig für Data Lakes, Event Streaming, APIs

Data Lake

Parquet/Avro Schemas erweitern

Kafka

Event-Schemas versionieren

APIs

Neue Felder ohne Breaking Change

Was sind sichere Schema-Änderungen?

Sicher: Felder hinzufügen (mit Default), optionale Felder. Unsicher: Felder entfernen, Typen ändern, Felder umbenennen.

Wie versioniere ich Schemas?

Schema Registry (Confluent, AWS Glue), Versionsnummern in Daten, oder separate Schema-Dateien mit Git.

Dein persönliches Share-Bild für Instagram – 1080×1080px, bereit zum Posten.