Почему kafka-avro-console-consumer не отображает значение по умолчанию для отсутствующего поля? - PullRequest
0 голосов
/ 03 апреля 2019

ОК, теперь я немного расстроен, учитывая тот факт, что я уже задал связанный вопрос:

Почему kafka-avro-console-продюсер не соблюдает значение по умолчанию для поля?

Если производитель использует старую схему без нового поля f2, потребитель, который использует новую схему, должен принять значение по умолчанию для этого поля, но это не очевидно в случае kafka-avro-console-consumer:

$ kafka-avro-console-producer --broker-list localhost:9092 --topic test-avro --property  schema.registry.url=http://localhost:8081 --property value.schema='{"type":"record","name":"myrecord1","fields":[{"name":"f1","type":"string"}]}'

{"f1": "value3"}

$ kafka-avro-console-consumer --bootstrap-server localhost:9092 --topic test-avro --property schema.registry.url=http://localhost:8081 --property value.schema='{"type":"record","name":"myrecord1","fields":[{"name":"f1","type":"string"},{"name": "f2", "type": "int", "default": 0}]}'

{"f1":"value3"}

Я имею в виду, ОК, он действительно не выдает исключение и завершается из-за пропущенного поля f2, то есть ОК, и он показывает фактическое сообщение, которое он получил, но оно не должно отображаться вместоо том, что представление этого сообщения в соответствии со схемой, которую он использует?

Вот обе версии схемы:

curl http://localhost:8081/subjects/test-avro-value/versions/1
{"subject":"test-avro-value","version":1,"id":5,"schema":"{\"type\":\"record\",\"name\":\"myrecord1\",\"fields\":[{\"name\":\"f1\",\"type\":\"string\"}]}"}
curl http://localhost:8081/subjects/test-avro-value/versions/2
{"subject":"test-avro-value","version":2,"id":6,"schema":"{\"type\":\"record\",\"name\":\"myrecord1\",\"fields\":[{\"name\":\"f1\",\"type\":\"string\"},{\"name\":\"f2\",\"type\":\"int\",\"default\":0}]}"}

Значит ли это, что такой сценарий нельзя протестировать с помощью kafka?-авро-консоль-потребитель?

enter image description here

1 Ответ

2 голосов
/ 03 апреля 2019

Ваш производитель зарегистрировал value.schema, который вы указали в Реестре.

Невозможно явно определить схему для потребителя, используя потребительские приложения Confluent, поскольку она извлекается непосредственно из реестра на основе идентификатора схемы, встроенного в байтовый массив полезной нагрузки.

...