avro union-type信息

s5a0g9ez  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(453)

我有一个java应用程序的一部分,它将avro编码的对象写入kafka主题。我使用 org.apache.kafka.clients.producer.Producer 向主题发送消息。生产者配置为使用 io.confluent.kafka.serializers.KafkaAvroSerializer .
avro模式包含以下字段:

{
  "name": "field1",
  "type": [
    "null",
    "string"
  ],
  "default": null
}

这基本上意味着它是一个可以为空的字符串字段。
向主题发送对象后,我使用以下终端命令检查其内容:

./kafka-avro-console-consumer --bootstrap-server broker-host:9091 --topic test-topic-1
  --property schema.registry.url=http://schema-host:8081 --from-beginning

因此,我希望看到具有以下属性的json:

{"field1": "something"}

然而,在现实中我看到了这一点:

{"field1": {"string": "something"}}

同时,如果我用 toString() 方法对对象进行扩展 SpecificRecordBase 在将其发送到主题之前,我看到了一个json格式,正如我所期望的那样。
有没有一种方法可以真正获取主题中的第一个选项,而不需要将这个额外的类型信息作为json的一部分?

4nkexdtk

4nkexdtk1#

有没有一种方法可以真正获取主题中的第一个选项,而不需要将这个额外的类型信息作为json的一部分?
没有什么可供选择的 avro-console-consumer . 它正在使用 GenericRecord ,不是 SpecificRecord 因为字段是联合类型,所以avro record json编码的输出必须包括 type 字段的值。

相关问题