Архитектура приложения Schema Registry#
Описание элементов диаграммы:
Элемент |
Описание |
|---|---|
Schema Registry REST Server |
Spring-Boot приложение, предоставляющее REST API для управления и получения схем |
SchemaRegistryClient |
Java API для выполнения всех запросов к Schema Registry REST Server. SchemaRegistryClient кеширует данные, полученные из REST Server. Поэтому, если схемы были пересозданы (удалены и повторно добавлены) или добавлена новая версия схемы, то приложение, которое использует SchemaRegistryClient, нужно перезапустить |
SchemaRegistrySerde |
Компонент Schema Registry, сериализатор (десериализатор), который или сериализует данные и записывает в топик, или читает данные из топика и десериализует |
Records Policy |
Компонент Schema Registry (policy), который на стороне брокера проверяет входящие данные на соответствие схеме |
Примечание
Records Policy на момент выхода версии Corax 10.340 НЕ ВХОДИТ в состав Apache Kafka и доступен только при использовании Corax.
REST Server#
Функции REST Server:
при старте создает топик
_schemasдля хранения схем;вычитывает из топика
_schemasданные при запуске;отвечает на HTTP REST запросы.
Для REST Server Schema Registry доступен Swagger UI с описанием API и примеров запросов по адресу http://<sr-host>:<sr-port>/swagger-ui/,
где:
<sr-host>– хост, на котором запущен сервер Schema Registry;<sr-port>– порт (по умолчанию 8081).
Алгоритм работы serializer#
При запросе сериализации определяется схема:
определяется имя субъекта;
если
schema.use.latest=true, выбирается последняя версия схемы;если
schema.use.latest=false, то версия схемы определяется с помощью настройки[subject].version;при других значениях – ошибка.
Данные сериализуются с помощью выбранной схемы.
В заголовки (header) записи добавляется идентификатор выбранной схемы.
Алгоритм работы deserializer#
При запросе десериализации определяется схема:
определяется имя субъекта;
если
schema.use.latest=true, выбирается последняя версия схемы;если
schema.use.latest=falseи есть настройка[subject].version, используется указанная версия;если
schema.use.latest=falseи есть заголовок (header) с версией схемы, используется присланная версия;при других значениях – ошибка.
Данные десериализуются с помощью выбранной схемы.
Алгоритм работы Records Policy#
При запросе десериализации определяется схема:
определяется имя субъекта;
если присутствует заголовок, записанный сериализатором, используется указанная версия схемы;
если заголовок отсутствует:
режим совместимости субъекта
NONE– проверка не выполняется;режим совместимости субъекта
BACKWARD,BACKWARD_TRANSITIVE,FULL,FULL_TRANSITIVE— выбирается последняя версия схемы;режим совместимости субъекта
FORWARD— выбирается предпоследняя (n - 1) версия схемы;режим совместимости субъекта
FORWARD_TRANSITIVE— выбирается первая версия схемы;
valueзаписи десериализуется с помощью выбранной схемы.
Kafka топик#
Для получения полных гарантий, что все сообщения в топике будут соответствовать схеме, при создании Kafka-топика необходимо указать опции проверки на стороне брокера. Подробнее — в главе «Настройки топика» раздела «Конфигурирование брокера Kafka».