У меня есть часть 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?