Не удается десериализовать старые данные Avro после добавления поля массива

#java #avro

#java #avro

Вопрос:

У меня был файл AVDL, который содержит в нем одну запись. Я использовал его для передачи сообщений в Kafka. После добавления массива я получил исключение. Я уже добавил несколько дополнительных полей в конце записи, но исключения не произошло.

последнее поле:

 union {array<string>,null} arrayFieldName={"doc":"array field description"};
  

Десериализатор:

  Schema messageSchema=Class<T extends SpecificRecordBase> messageType.newInstance().getSchema();
 DatumReader<GenericRecord> datumReader =  new SpecificDatumReader<>(messageSchema);
 Decoder decoder = DecoderFactory.get().binaryDecoder(data, null);
 GenericRecord  result = datumReader.read(null, decoder);`
  

исключение:

 java.io.EOFException
    at org.apache.avro.io.BinaryDecoder.ensureBounds(BinaryDecoder.java:473)
    at org.apache.avro.io.BinaryDecoder.readInt(BinaryDecoder.java:128)
    at org.apache.avro.io.BinaryDecoder.readIndex(BinaryDecoder.java:423)
    at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
    at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
    at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
    at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:179)
    at org.apache.avro.specific.SpecificDatumReader.readField(SpecificDatumReader.java:116)
    at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:222)
    at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:175)
    at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:153)
    at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:145)
    .
    .
    .

  

Есть ли способ решить эту проблему? Мне действительно нужно это поле массива.