✉️ Пост 38. Avro-схема и Schema Registry в Kafka - объясняю по-человечески Когда люди начинают работать с Kafka, почти всегда сначала кидают сообщения в JSON. Типа: { "orderId": 123, "status": "PAID" } Все вроде ок… А потом система растет, сервисов становится 10, и начинается хаос: • кто-то удалил поле • кто-то поменял тип • кто-то переименовал status в state • consumer упал • прод горит • аналитик плачет 😅 И вот тут появляются два мощных слова: Avro-схема и Schema Registry 🧠 Что такое Avro-схема Avro-схема - это по сути паспорт сообщения. Не "примерно такие поля", а строго: • какие поля есть • какие у них типы • что обязательно • что можно добавлять

Пример схемы: { "type": "record", "name": "OrderEvent", "fields": [ { "name": "orderId", "type": "long" }, { "name": "status", "type": "string" }, { "name": "amount", "type": "double" } ] } Это значит: orderId - число status - строка amount - дробь И никак иначе.

⚙️ А что делает продюсер? Самое важное: Продюсер не просто отправляет JSON в Kafka. Он берет данные и пытается засунуть их в схему через Avro-сериализацию. Если данные не подходят, сообщение даже не уйдет. Например, если отправить так: { "orderId": "hello", "status": "PAID" } А схема ждет long, то будет ошибка: 💥 "expected long, got string" То есть продюсер не может отправить "что попало". Схема работает как форма: Не влез - не отправил.

🏛 Тогда что такое Schema Registry? Schema Registry - это отдельный сервис, который хранит все схемы сообщений. Можно думать о нем как о библиотеке контрактов для Kafka Он отвечает на вопросы: • какая схема у этого топика • какая версия актуальная • какие изменения допустимы • что уже устарело

🔗 Как Avro связан со Schema Registry Схема не передается внутри каждого сообщения. Иначе было бы слишком жирно. Вместо этого Kafka-сообщение выглядит так: [schemaId][binary payload] То есть: 1️⃣ Продюсер берет данные 2️⃣ Получает schemaId из Schema Registry 3️⃣ Сериализует сообщение в Avro 4️⃣ Отправляет в Kafka только schemaId + бинарные данные

👀 А consumer что делает? Consumer читает сообщение и видит: "Ага, schemaId = 17" И идет в Schema Registry: "Дай схему номер 17" Получает схему и правильно расшифровывает payload.

Почему это схема крутая:Контракт железный Все сервисы работают по одной структуре. ✅ Сообщения меньше по размеру Avro бинарный, без лишнего текста. ✅ Поддержка версий Schema Registry хранит v1, v2, v3… ✅ Контроль совместимости Registry может запретить опасные изменения: ❌ нельзя удалить обязательное поле ❌ нельзя поменять string на int ➕ можно добавить optional поле Это основа обратной совместимости в Kafka.

#кафка #СА #системныйанализ #it