Зачем нужна Schema Registry в Kafka-экосистеме?
- Как не сломать потребителей при изменении формата сообщений?
Schema Registry хранит версии схем сообщений (Avro, Protobuf, JSON Schema) и проверяет совместимость новых версий. Сообщение несёт id схемы, а не саму схему.
- Режимы: BACKWARD (новые читатели читают старые данные), FORWARD, FULL
- Несовместимая схема отклоняется при регистрации — ошибка в сборке, а не в проде
- Компактные бинарные сообщения: 5 байт заголовка с id вместо полной схемы
А ещё Схема — контракт между командами, как OpenAPI для REST
Подробно
Проблема: производитель и потребители — разные команды и выкатки. Если производитель удалит поле или сменит тип, потребители упадут на десериализации. JSON без схемы делает эти поломки незаметными до прода.
Как работает:
- сериализатор продюсера регистрирует схему (или находит существующую) и получает id;
- сообщение = магический байт + id схемы + данные;
- десериализатор потребителя по id берёт схему писателя из реестра (кэширует) и читает данные, приводя их к своей схеме читателя.
Совместимость проверяется при регистрации новой версии:
- BACKWARD (по умолчанию) — потребитель с новой схемой читает данные, записанные старой: можно добавлять поля со значением по умолчанию и удалять поля. Сначала обновляют потребителей;
- FORWARD — старые потребители читают новые данные: сначала обновляют производителей;
- FULL — оба направления;
- варианты _TRANSITIVE — против всех прежних версий, а не только последней.
Практика: проверка совместимости в CI, именование субъектов по топику, правила эволюции — новые поля только со значением по умолчанию.
Что хотят услышать
- Зачем: контракт и проверка совместимости.
- Как сообщения ссылаются на схему.
- Режимы совместимости и порядок выкатки.
Частые ошибки
- Добавлять обязательное поле без значения по умолчанию.
- Отправлять JSON без схемы и надеяться на дисциплину.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Хранить пароли и ключи доступа к брокеру
- ✗Хранить копии всех сообщений топика, чтобы consumer мог их перечитать после retention
- ✗Балансировать нагрузку между партициями
- ✓Хранить схемы сообщений и проверять совместимость их новых версий
Что спросят дальше
- Что такое backward compatibility?
- Как добавлять поле в Avro-схему?
Разбор темы
- Kafka API и экосистема
Клиентские API, Kafka Connect и Debezium, Streams и stream-processing, ksqlDB, Schema Registry и MirrorMaker для multi-DC.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.