【问题标题】:Deserialization error when using an evolved schema使用进化模式时出现反序列化错误
【发布时间】:2022-11-17 11:22:03
【问题描述】:

我最初有以下架构

{
"type":"record",
"name":"EntityA",
"fields":[
  {"name":"values",
   "type": {"type":"array","items": {"type":"record","name":"SubEntities",
     "fields":[
      {"name":"name","type":"string"}, 
      {"name":"valueMap", "type":["null",{"type":"map","values":"string"}], "default":null}
      ]
   }}
  }
 ]
}

我在 rocksdb 中存储了使用这个模式序列化的记录,然后我向这个模式添加了另一个字段

{
"type":"record",
"name":"EntityA",
"fields":[
  {"name":"values",
   "type": {"type":"array","items": {"type":"record","name":"SubEntities",
     "fields":[
      {"name":"name","type":"string"}, 
      {"name":"valueMap", "type":["null",{"type":"map","values":"string"}], "default":null},
      {"name":"newMap", "type":["null",{"type":"map","values":"int"}], "default":null},
      ]
   }}
  }
 ]
}

现在我正在使用上面的模式,但也有在模式注册表中注册的原始模式。突然,我开始收到这个错误。

org.apache.kafka.common.errors.SerializationException: Error deserializing Avro message for id 5
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 27 out of bounds for length 2
at org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:460)
at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:283)
at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:188)
at org.apache.avro.specific.SpecificDatumReader.readField(SpecificDatumReader.java:136)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:248)
at org.apache.avro.specific.SpecificDatumReader.readRecord(SpecificDatumReader.java:123)
at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:180)
at org.apache.avro.generic.GenericDatumReader.readArray(GenericDatumReader.java:299)
at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:184)
at org.apache.avro.specific.SpecificDatumReader.readField(SpecificDatumReader.java:136)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:248)
at org.apache.avro.specific.SpecificDatumReader.readRecord(SpecificDatumReader.java:123)
at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:180)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:161)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:154)

其中 id 5 对应于上面的原始模式。有人可以帮助理解此错误的原因。

【问题讨论】:

    标签: avro rocksdb


    【解决方案1】:

    有这方面的更新吗?我们面临着同样的问题。

    【讨论】:

    • Amrit Sarkar,请不要添加我也是作为答案。它实际上并没有提供问题的答案。如果您有不同但相关的问题,请ask它(如果它有助于提供上下文,请参考此问题)。如果你对这个具体问题感兴趣,你可以upvote它,留下comment,或者一旦你有足够的reputation就开始bounty
    猜你喜欢
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2015-01-11
    • 2011-12-17
    • 2015-05-06
    相关资源
    最近更新 更多