Avro union - введите информацию в результате json - PullRequest
0 голосов
/ 15 ноября 2018

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

0 голосов
/ 16 ноября 2018

Есть ли способ получить первый вариант в теме, если эта дополнительная информация о типе не является частью JSON?

Не существует для avro-console-consumer.Он использует GenericRecord, а не SpecificRecord

Поскольку поле является объединяющим типом, выход JSON в кодировке Avro Record должен содержать type поля для этого значения.

...