У меня есть сценарий использования, где у меня есть JSON, и я хочу сгенерировать схему и записать из JSON и опубликовать sh запись. Я настроил сериализатор значений, и настройка схемы обратно совместима.
Первый JSON
Строка json = "{\ n" +
" \"id\": 1,\n" +
" \"name\": \"Headphones\",\n" +
" \"price\": 1250.0,\n" +
" \"tags\": [\"home\", \"green\"]\n" +
"}\n"
;
Зарегистрированная схема версии 1.
Получено сообщение в консоли пользователя avro.
Второй JSON.
String json = "{ \ n "+
" \"id\": 1,\n" +
" \"price\": 1250.0,\n" +
" \"tags\": [\"home\", \"green\"]\n" +
"}\n"
;
Зарегистрированная схема успешно. Отправленное сообщение.
Теперь попытался отправить JSON 1, успешно отправлено
Схема 3:
Строка json = "{\ n" +
" \"id\": 1,\n" +
" \"name\": \"Headphones\",\n" +
" \"tags\": [\"home\", \"green\"]\n" +
"}\n"
;
Получена ошибка для этого случая. Вызывается: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: регистрируемая схема несовместима с более ранней схемой; код ошибки: 409
Как эта схема, сгенерированная из 2-го JSON, была зарегистрирована, а третья отклонена? Хотя у меня не было ключа по умолчанию для удаленного поля? Это то, что Реестр Схем всегда принимает 1-ю эволюцию? (2-я схема над 1-й)
Схема в реестре схем
Схема версии 1
{"fields": [
{
"doc": "Type inferred from '1'",
"name": "id",
"type": "int"
},
{
"doc": "Type inferred from '\"Headphones\"'",
"name": "name",
"type": "string"
},
{
"doc": "Type inferred from '1250.0'",
"name": "price",
"type": "double"
},
{
"doc": "Type inferred from '[\"home\",\"green\"]'",
"name": "tags",
"type": {
"items": "string",
"type": "array"
}
}
],
"name": "myschema",
"type": "record" }
Версия 2:
{"поля": [
{
"doc": "Type inferred from '1'",
"name": "id",
"type": "int"
},
{
"doc": "Type inferred from '1250.0'",
"name": "price",
"type": "double"
},
{
"doc": "Type inferred from '[\"home\",\"green\"]'",
"name": "tags",
"type": {
"items": "string",
"type": "array"
}
}
],
"name": "myschema",
"type": "record" }