Обновление схемы потребителя во время десериализации

В настоящее время я изучаю систему схемы Avro, и, насколько я понимаю, поток обновления схемы таков:

1) Клиент изменяет схему (возможно, добавляя новое поле со значением по умолчанию для обратной совместимости) и отправляет данные в Kafka, сериализованные с обновленной схемой.

2) Реестр схем проверяет совместимость и регистрирует новую версию схемы с новой версией и уникальным идентификатором.

3) Потребитель (все еще использующий старую схему) пытается десериализовать данные, и эволюция схемы удаляет новое поле, позволяя потребителю десериализовать данные.

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


person Rexi    schedule 08.02.2019    source источник


Ответы (1)


Вам необходимо обновить потребительские схемы, если они используют подкласс SpecificRecord. Это эффективно пропускает поиск идентификатора схемы

Если вы хотите, чтобы он всегда соответствовал последней версии, вы можете сделать http-вызов реестра на /latest и получить его, а затем перезапустить приложение.

Или, если вы хотите, чтобы потребитель всегда использовал идентификатор сообщения, используйте GenericRecord в качестве типа объекта.

person OneCricketeer    schedule 08.02.2019