首页 > 解决方案 > GenericDatumWriter 的 Avro 压缩

问题描述

我正在反序列化消费者中的 avro 事件,我实现了一个方法 jsonToAvro 来模拟生产者,但我不知道产生的事件是否包括压缩,所以我试图测试所有编解码器以猜测哪个编解码器被生产者。

此外,我认为如果您未指定任何内容,则默认应用 Snappy 压缩,但所有压缩代码示例都包含在 DataFileWriter 而不是 GenericDatumWriter 中,所以我很困惑,因为默认情况下 Snappy 压缩可能仅适用于将事件写入文件时。

斯卡拉代码:

  private def jsonToAvro(json: String, schema: Schema) = {
    val reader = new GenericDatumReader[GenericRecord](schema)
    val writer = new GenericDatumWriter[GenericRecord](schema)

    val output = new ByteArrayOutputStream()
    val decoder = DecoderFactory.get.jsonDecoder(schema, json)
    val encoder = EncoderFactory.get.binaryEncoder(output, null)

    val datum = reader.read(null, decoder)
    writer.write(datum, encoder)
    encoder.flush()
    val byteArray = output.toByteArray

    byteArray
  }

是否可以为 GenericDatumWriter 设置压缩编解码器?

这个 GenericDatumWriter 默认使用 Snappy 压缩吗?

提前致谢

标签: avro

解决方案


推荐阅读