AvroTypeException: Zeichenfolge gefunden, beim Konsumieren der Kafka-Nachricht wird eine Vereinigung erwartet
Posted: 27 Dec 2024, 10:11
Kontext
Ich schreibe Ihnen diese Nachricht, weil ich beim Konsumieren eines Kafka-Themas einen Deserialisierungsfehler habe, der von io.confluent.kafka.serializers.KafkaAvroDeserializer.java ausgelöst wurde.
Nachfolgend finden Sie relevante Versionen, die in meinem Spring JAVA-Projekt verwendet werden:
Nicht die neuesten Versionen, aber die gleichen Abhängigkeiten werden auch zum Konsumieren anderer Themen in der Produktion verwendet und die anderen Konsumenten funktionieren gut.
Das Problem< /h1>
Der Fehler ist:
Verursacht durch: org.apache.avro.AvroTypeException: Zeichenfolge gefunden, Union wird erwartet
at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:308)
bei org.apache.avro.io.parsing.Parser.advance(Parser.java:86)
bei org. apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:275)
at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:187)
In der an das Thema gesendeten Nachricht werden alle Felder enthalten eine nicht leere Zeichenfolge.
Ein Teammitglied schlug vor, in jeder Felddefinition den Standardwert „“ hinzuzufügen.
Aber ich bin mir nicht sicher, ob dieses Problem dadurch behoben wird, da die Nachricht keine leeren Felder enthält.
Vielleicht gibt es einen Unterschied im Schema des Autors
Und hier ist das Schema meines Lesers:
Im Leserschema ist die Reihenfolge der Felder nicht dieselbe.
Hier habe ich gelesen, dass es wichtig sein könnte: https://avro.apache.org/docs/1.8.2 /spec.html#binary_encode_complex
Auch frühere Versionen des Schemas wurden veröffentlicht und dann von dem Team, das mir eine Nachricht sendet, gelöscht.
Fragen
Ich schreibe Ihnen diese Nachricht, weil ich beim Konsumieren eines Kafka-Themas einen Deserialisierungsfehler habe, der von io.confluent.kafka.serializers.KafkaAvroDeserializer.java ausgelöst wurde.
Nachfolgend finden Sie relevante Versionen, die in meinem Spring JAVA-Projekt verwendet werden:
Code: Select all
org.apache.avro
avro
1.10.1
io.confluent
kafka-avro-serializer
7.2.1
Das Problem< /h1>
Der Fehler ist:
Verursacht durch: org.apache.avro.AvroTypeException: Zeichenfolge gefunden, Union wird erwartet
at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:308)
bei org.apache.avro.io.parsing.Parser.advance(Parser.java:86)
bei org. apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:275)
at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:187)
In der an das Thema gesendeten Nachricht werden alle Felder enthalten eine nicht leere Zeichenfolge.
Ein Teammitglied schlug vor, in jeder Felddefinition den Standardwert „“ hinzuzufügen.
Code: Select all
{
"name": "namespace_Fld1",
"type": [
"string",
"null"
],
"default": ""
},
Vielleicht gibt es einen Unterschied im Schema des Autors
Code: Select all
{"type":"record",
"name":"myClassName",
"namespace":"fr.laposte.bdl.bscc.myClassName",
"fields":
[
{"name":"namespace_Fld1",
"type":["string","null"]},
{"name":"namespace_Fld2",
"type":["string","null"]},
{"name":"namespace_Fld3",
"type":["string","null"]},
{"name":"namespace_Fld4",
"type":["string","null"]},
{"name":"namespace_Fld5",
"type":["string","null"]},
{"name":"namespace_Fld6",
"type":["string","null"]},
{"name":"namespace_Fld7",
"type":["string","null"]},
{"name":"namespace_Fld8",
"type":["string","null"]},
{"name":"namespace_Fld9",
"type":["string","null"]}
],
"default":null
}
Code: Select all
"type": "record",
"name": "myClassName",
"namespace": "fr.laposte.bdl.bscc.myClassName",
"fields": [
{
"name": "namespace_Fld4",
"type": [
"string",
"null"
]
},
{
"name": "namespace_Fld5",
"type": [
"string",
"null"
]
},
{
"name": "namespace_Fld7",
"type": [
"int",
"null"
]
},
{
"name": "namespace_Fld8",
"type": [
"string",
"null"
]
}
]
}
Hier habe ich gelesen, dass es wichtig sein könnte: https://avro.apache.org/docs/1.8.2 /spec.html#binary_encode_complex
Auch frühere Versionen des Schemas wurden veröffentlicht und dann von dem Team, das mir eine Nachricht sendet, gelöscht.
Fragen
- Sollte mein Leserschema in irgendeiner Weise aktualisiert werden?
< li>Könnte es ein Problem mit dem Avro-Cache geben? - Sollte etwas mit dem Schema meines AVRO-Readers getan werden?