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
Antwort
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
(oderforward
), so dass Sie Ihr Schema aktualisieren können (wie standardmäßig comptibiliaty istbackward
). 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.
- 1. Kafka Schema Evolution
- 2. Avro Schema Evolution: Felder können nicht hinzugefügt oder entfernt werden
- 3. Kafka Streams erstellt Avro-Thema ohne Schema
- 4. Avro mit Kafka - Deserialisieren mit wechselndem Schema
- 5. Apache Kafka mit zentralisiertem Avro-Schema
- 6. Entschlüsseln Kafka Avro Nachricht
- 7. Avro-Nachrichten mit Schema
- 8. kafka avro schema - 500 interner Server Fehler nach 1000 Nachrichten
- 9. Wie ich Deserialize Avro von Kafka mit eingebettetem Schema
- 10. Avro-Schema-Auflösung mit verschiedenen Namespace
- 11. Python - Schema-lose Apache Avro Datenserialisierung
- 12. Wie Avro lesen Kodierte Kafka-Nachricht in Scala ohne Avro-Schema zu kennen?
- 13. Avro Kafka Konvertierungsprobleme zwischen Scala und Python
- 14. Apache Flink lesen Avro byte [] von Kafka
- 15. Ausgabe AVRO Kafka Speicherung Strom System Datei
- 16. Erstellen AVRO-Schema aus JSON-Schema-Datei
- 17. Avro Schema in Confluent Schema-Registry speichern
- 18. Machen Sie Reactive Kafka arbeiten mit Konfluent Schema Registry Avro Schema
- 19. Wie kafka-avro-console-producer verwenden?
- 20. Spring Boot Kafka Camel Avro Verbraucher
- 21. Kann Kafka Avro decodierte Nachricht nicht drucken
- 22. C# Avro Schema nicht mit Datenstrom codiert
- 23. Avro-Schema Parsing von Datendatei
- 24. Spring cloud kafka und avro serialisierungsproblem
- 25. mit anderen avro-Schema für neue Spalten
- 26. Confluence Kafka Avro Deserializer für Spring Boot Kafka Listener
- 27. HDP Kafka Schema Registrierung
- 28. Install confluent-kafka avro mit pip
- 29. Avro an Spark-Streaming über Kafka senden
- 30. Logstash mit Kafka: Kann Avro nicht entschlüsseln
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? –
Ja, das stimmt. Aber ich war neugierig, ob es Arbeit gibt, um diese Situation anzugehen, ohne neue Themen zu erstellen. –