apache风暴反序列化:EOFException

时间:2018-07-21 14:52:43

标签: java kotlin deserialization apache-storm avro

我有一个拓扑,其中螺栓获取具有序列化有效负载的元组,并尝试使用包裹在GenericDatumReader周围的我们自己的Avro反序列化器对其进行反序列化。我所看到的行为是,在极少数情况下(几个小时,在此期间,我们会获得成千上万个这样的元组),除非出现以下例外情况,否则螺栓将无法反序列化传入的元组:

java.io.EOFException: null
at org.apache.avro.io.BinaryDecoder.ensureBounds(BinaryDecoder.java:473) ~[stormjar.jar:na]
at org.apache.avro.io.BinaryDecoder.readInt(BinaryDecoder.java:128) ~[stormjar.jar:na]
at org.apache.avro.io.BinaryDecoder.readString(BinaryDecoder.java:259) ~[stormjar.jar:na]
at org.apache.avro.io.BinaryDecoder.readString(BinaryDecoder.java:272) ~[stormjar.jar:na]
at org.apache.avro.io.ResolvingDecoder.readString(ResolvingDecoder.java:214) ~[stormjar.jar:na]
at org.apache.avro.generic.GenericDatumReader.readString(GenericDatumReader.java:353) ~[stormjar.jar:na]
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:157) ~[stormjar.jar:na]
at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193) ~[stormjar.jar:na]
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183) ~[stormjar.jar:na]
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151) ~[stormjar.jar:na]
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142) ~[stormjar.jar:na]
// our own wrapper around GenericDatumReader
...

发生异常时,我将其捕获并记录了元组的二进制有效载荷。 我能够使用相同的代码在本地反序列化它,这意味着该元组没有损坏。

此外,由于我们的拓扑被配置为可靠,因此元组再次被重放,并成功反序列化。

这是与org.apache.avro:avro:1.7.7org.apache.storm:storm-core:0.9.6一起使用的。

我很好奇为什么会发生这种情况。

0 个答案:

没有答案