我有一个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的一部分?
1条答案
按热度按时间4nkexdtk1#
有没有一种方法可以真正获取主题中的第一个选项,而不需要将这个额外的类型信息作为json的一部分?
没有什么可供选择的
avro-console-consumer
. 它正在使用GenericRecord
,不是SpecificRecord
因为字段是联合类型,所以avro record json编码的输出必须包括type
字段的值。