2017-08-17 3 views
1

Ich versuche mehr über avro schemas zu lernen, die wir für unsere kafka Themen verwenden und ich bin relativ neu dazu. Ich habe mich gefragt, ob es eine Möglichkeit gibt, in einer bestimmten Situation Schemata zu entwickeln. Wir aktualisieren unser Schema mit einem neuen Feld, das nicht Null oder irgendwelche Standardwerte sein kann, da diese Art von Bezeichnern wäre. Die Arbeit für diese Aufgabe besteht darin, neue Themen zu erstellen, aber es gibt eine bessere Möglichkeit, vorhandene Schemas weiterzuentwickeln. Vielen Dank.Kafka Avro Schema Evolution

+1

gehen würde, wenn das neue Feld nicht null sein kann und keinen Standardwert haben kann, dann was würden Sie mit all den alten Aufzeichnungen machen wollen, die keine Dieses Feld? Wie möchten Sie, dass sie sich in das neue Schema entwickeln? –

+0

Ja, das stimmt. Aber ich war neugierig, ob es Arbeit gibt, um diese Situation anzugehen, ohne neue Themen zu erstellen. –

Antwort

1

Es gibt vier mögliche Kompatibilität zum Thema: - Forward: ein Client, der die alte Version des Schemas erwarten die neue Version lesen kann - Backward: ein Kunde, der die neue Version des Schemas abwarten kann die alte Version lesen - Both: sowohl über - None: keine von oben

Bedenken Sie, dass es einige Zeiten, in denen einige Hersteller alte und neue Daten produzieren, und Verbraucher werden neue oder alte Daten mit Ausnahme.

Wie würden sich Kunden in Ihrem Fall verhalten?

  • dem Hinzufügen eines Feldes ist immer vorwärts kompatibel (alte Kunden fallen nur das neue Feld)
  • es ist rückwärtskompatibel nur, wenn Sie einen Standardwert angeben

Auch dies ist nur wahr, wenn Sie planen, Daten in ein spezifisches Schema zu konvertieren (zum Beispiel mit dem entsprechenden POCO) - wenn Sie es einfach in json konvertieren und eine benutzerdefinierte Behandlung vornehmen, könnten Sie einen neuen Client beide Schemata verarbeiten lassen.

So zwei possibe Möglichkeiten für mich zu demselben Thema wrte:

  • Sie setzen einen Standardwert. Sie kann Standardwerte Mißverständnis, es bedeutet nicht, ein Standardwert geschrieben wird, sondern (unter Angabe avro Spezifikationen)

    Ein Standardwert für dieses Feld verwendet, wenn Instanzen zu lesen, die dieses Feld (optional)

    fehlt

zum Beispiel, wenn Sie zuvor einen „Namen“ haben und wollen „Nachnamen“ hinzufügen, können Sie Set „Nachname“ default als „NC“ (oder leer), wie Sie in getan haben eine Datenbank.

  • Sie setzen Ihre Kompatibilität Standard none (oder forward), so dass Sie Ihr Schema aktualisieren können (wie standardmäßig comptibiliaty ist backward). In diesem Fall kann der Client, der auf das neue Schema wartet, keine alten Daten verarbeiten. Aber es könnte zu Ihrer Verwendung passen, wenn Sie nur eingehende Daten verarbeiten (Kompatibilität ändern, alle Producer aktualisieren (damit nur neue Daten ankommen), dann Ihre Clients auf das neue Schema warten - denken Sie daran, die Kompatibilität zurück zu setzen oder die Kompatibilität wirklich
  • wollen

ich mit Option 1.

Verwandte Themen