ОК, теперь я немного расстроен, учитывая тот факт, что я уже задал связанный вопрос:
Почему 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](https://i.stack.imgur.com/5cJ8p.jpg)