Вопрос с собеседования · Брокеры сообщений

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

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

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

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

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

Подробно

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

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

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

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

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

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

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

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

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

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

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

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

Показать варианты и ответ
  • ✗Хранить пароли и ключи доступа к брокеру
  • ✗Хранить копии всех сообщений топика, чтобы consumer мог их перечитать после retention
  • ✗Балансировать нагрузку между партициями
  • ✓Хранить схемы сообщений и проверять совместимость их новых версий

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования