Avro:重用解码器

时间:2017-01-04 16:13:55

标签: java avro google-cloud-dataflow

在定义要提供给DatumReader类的解码器时,可以选择重复使用解码器,如下所示。正如文档中所提到的,解码器类是不可变的和线程安全的,因此重用它确实有意义。什么是最佳实践,是重用解码器?如果我们每次尝试解码Avro有效负载时都创建解码器,是否会产生性能开销?

DatumReader<T> reader = new ReflectDatumReader<>(writerSchema, readerSchema);
// Second argument is a decoder to be reused
DecoderFactory.get().binaryDecoder(record, null);
reader.read(null, binaryDecoder);

1 个答案:

答案 0 :(得分:1)

这种优化不是必需的,并且可能无法真正提高性能。如果您不这样做,请告诉我们。

基本上,编辑器是在管道提交期间创建和序列化的,作为工作描述的一部分。它在每个后端进行反序列化,以创建给定工作单元的实例。这些工作单元足够大,不应该创建大量的编码器,因此它不应该是性能问题。

此外,AvroCoder序列化架构,因此反射不会多次执行。此外,只是共享实例(如所描述的)实际上不会导致共享反序列化的实例。