Архитектура приложения 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».