生成 Avro 编码到 Kafka

问题描述 投票:0回答:2

根据AVRO参考文档有两种编码:二进制和JSON编码,但是在大多数avro消息Kafka生产者脚本示例中,它从未指定使用哪种编码,我需要一个以二进制编码发送avro的示例和另一个以JSON编码发送AVRO到kafka的例子,进行一些测试,谢谢!

json apache-kafka avro
2个回答
0
投票

avro消息Kafka生产者脚本的大多数示例,从未指定使用哪种编码

我见过的所有示例都使用二进制。具体来说,Confluence(或 Apicurio 或 AWS Glue)都使用使用 Avro API

BinaryEncoder
类的类。如果您想使用 Avro,只需使用架构注册表即可;这比您自己管理模式要容易得多。

没有理由在 Kafka 中真正使用“Avro JSON 编码”。二进制数据格式更紧凑、更快。但 Avro 文档已经展示了如何创建 JSONEncoder 类并向其传递

ByteArrayOutputStream
。除了将
ByteArraySerializer
与生产者一起使用之外,Kafka 没有什么特别的。


0
投票

Confluence avro 库(io.confluence:kafka-avro-serializer)确实提供 Avro 数据 JSON 编码的选项。它明确使用二进制 Avro 编码,没有配置使用 json 编码的选项:

  • AbstractKafkaAvroSerializer
    • 包含
      org.apache.avro.io.EncoderFactory
      的实例
      • 使用
        encoderFactory.directBinaryEncoder(out, null)
        对数据进行编码。
  • AbstractKafkaAvroDeserializer
    • 包含
      org.apache.avro.io.DecoderFactory
      的实例
      • 使用
        decoderFactory.binaryDecoder(buffer)
        解码数据。

我无法解释为什么这可能是因为二进制编码的数据更加紧凑......看来如果你想使用 JSON 编码的 Avro 生产者和所有消费者将需要使用不同的库来编写并阅读 Kafka 主题。我没有提供开源库选项,您可能需要自己推出。

如果在您的组织内期望所有与您的主题交互的 Kafka 消费者(和生产者)使用汇合库是不现实的,那么您将需要坚持使用二进制编码的 Avro。

© www.soinside.com 2019 - 2024. All rights reserved.