Реестр схемы слияния: удаление идентификатора схемы - PullRequest
0 голосов
/ 25 сентября 2019

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

Мы удалили схему / тему и попытались создать новую схему с тем же именем субъекта, и схема была успешно создана.

Однако, когда мы запускаем приложение, оно все еще указывает на ту же схемуID.

Старый идентификатор схемы (для субъекта 'topic1'): 51

Новый идентификатор схемы (для субъекта 'topic1'): 52

Сбой приложения с ошибкой десериализациисообщение

    at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:736)
Caused by: org.apache.kafka.common.errors.SerializationException: Error deserializing Avro message for id 51
Caused by: org.apache.avro.AvroTypeException: Found string, expecting union
    at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:292)
    at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
    at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
    at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumRea

root@bas:/# curl -k https://schemaregistry:443/subjects/topic1/versions/latest

{"subject":"topic1","version":15,"id":52,"schema":"{\"type\":\"record\",\"name\":\"TopicOutputOutput\",\"namespace\":\"com.sagar.avsc\",\"fields\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"client\",\"type\":{\"type\":\"record\",\"name\":\"ClientObject\",\"fields\":[{\"name\":\"name\",\"type\":[\"null\",\"string\"]},{\"name\":\"client_id\",\"type\":[\"null\",\"long\"]},{\"name\":\"source_system_id\",\"type\":[\"null\",\"long\"]}]}},  ... 

Изменение: {\"name\":\"client_id\",\"type\":[\"null\",\"long\"]}

Вы можете видеть, что идентификатор схемы равен 52, но приложение пытается использовать более старый идентификатор схемы(51), что несовместимо с данными, которые мы отправляем

root@bas:/#  curl -k https://schemaregistry:443/schemas/ids/52
{"schema":"{\"type\":\"record\",\"name\":\"TopicOutputOutput\",\"namespace\":\"com.sagar.avsc\",\"fields\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"client\",\"type\":{\"type\":\"record\",\"name\":\"ClientObject\",\"fields\":[{\"name\":\"name\",\"type\":[\"null\",\"string\"]},{\"name\":\"client_id\",\"type\":[\"null\",\"long\"]},{\"name\":\"source_system_id\",

Изменение: {\"name\":\"name\",\"type\":[\"null\",\"string\"]}

Почему приложение все еще ссылается на более старый идентификатор схемы? И есть ли способ удалитьИдентификатор схемы?

1 Ответ

0 голосов
/ 27 сентября 2019

Вы можете выдать DELETE для /subjects/:name/versions/:version

Однако идентификатор схемы 51 по-прежнему в теме , и удалить его оттуда невозможно, пока не истечет срок действия этих сообщений.или могут быть захоронены в случае уплотненных тем.

И если схемы несовместимы, я бы проверил настройки реестра, потому что по умолчанию он не допускает обратно несовместимых изменений.

...