Получить доступ

Зачем нужна Schema Registry в Kafka-экосистеме?

MiddleЭкосистема KafkaKafka
Ещё спрашивают так:
  • Как не сломать потребителей при изменении формата сообщений?
Коротко

Schema Registry хранит версии схем сообщений (Avro, Protobuf, JSON Schema) и проверяет совместимость новых версий. Сообщение несёт id схемы, а не саму схему.

  • Режимы: BACKWARD (новые читатели читают старые данные), FORWARD, FULL
  • Несовместимая схема отклоняется при регистрации — ошибка в сборке, а не в проде
  • Компактные бинарные сообщения: 5 байт заголовка с id вместо полной схемы

А ещё Схема — контракт между командами, как OpenAPI для REST

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Проблема: производитель и потребители — разные команды и выкатки. Если производитель удалит поле или сменит тип, потребители упадут на десериализации. JSON без схемы делает эти поломки незаметными до прода.

Как работает:

  1. сериализатор продюсера регистрирует схему (или находит существующую) и получает id;
  2. сообщение = магический байт + id схемы + данные;
  3. десериализатор потребителя по id берёт схему писателя из реестра (кэширует) и читает данные, приводя их к своей схеме читателя.

Совместимость проверяется при регистрации новой версии:

  • BACKWARD (по умолчанию) — потребитель с новой схемой читает данные, записанные старой: можно добавлять поля со значением по умолчанию и удалять поля. Сначала обновляют потребителей;
  • FORWARD — старые потребители читают новые данные: сначала обновляют производителей;
  • FULL — оба направления;
  • варианты _TRANSITIVE — против всех прежних версий, а не только последней.

Практика: проверка совместимости в CI, именование субъектов по топику, правила эволюции — новые поля только со значением по умолчанию.

Что хотят услышать

  • Зачем: контракт и проверка совместимости.
  • Как сообщения ссылаются на схему.
  • Режимы совместимости и порядок выкатки.

Частые ошибки

  • Добавлять обязательное поле без значения по умолчанию.
  • Отправлять JSON без схемы и надеяться на дисциплину.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Хранить схемы сообщений и проверять их совместимость при эволюции (BACKWARD/FORWARD/FULL); продюсер регистрирует схему, consumer достаёт нужную версию по id
  • ✗Хранить пароли и ключи доступа к брокеру
  • ✗Балансировать нагрузку между партициями
  • ✗Заменять Kafka на встроенную in-memory очередь

Что спросят дальше

  • Что такое backward compatibility?
  • Как добавлять поле в Avro-схему?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем