Налаштування Kafka Schema Registry для валідації повідомлень

Без Schema Registry Kafka-топіки — це сліпі байтові потоки. Продюсер змінив формат JSON — консьюмер впав з NullPointerException. За статистикою, 70% інцидентів у продакшені пов'язані з несумісністю схем. Ми вирішуємо цю проблему за допомогою Confluent **Schema Registry**: схема повідомлення версіону

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування Kafka Schema Registry для валідації повідомлень
Складний
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1286
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Без Schema Registry Kafka-топіки — це сліпі байтові потоки. Продюсер змінив формат JSON — консьюмер впав з NullPointerException. За статистикою, 70% інцидентів у продакшені пов'язані з несумісністю схем. Ми вирішуємо цю проблему за допомогою Confluent Schema Registry: схема повідомлення версіонується, еволюція контролюється, несумісні зміни блокуються до публікації. Під ключ налаштовуємо Schema Registry для Apache Avro, Protobuf або JSON Schema — оцінимо ваш проєкт за 1 день.

Schema Registry — окремий HTTP-сервіс, який зберігає схеми в Kafka-топіку _schemas. Продюсер при першому відправленні реєструє схему та отримує schema_id (ціле число). Замість повної схеми в кожне повідомлення вшивається лише schema_id (4 байти) — це і є wire format Confluent. Avro-повідомлення займає в 2-3 рази менше місця, ніж еквівалентна JSON-схема.

Producer → [magic byte 0x00][schema_id 4 bytes][serialized payload] → Kafka Consumer → читає schema_id → запитує схему з Registry → десеріалізує 

Чому Schema Registry обов'язкова для продакшену?

Без Schema Registry еволюція схем перетворюється на пекло. Ви додали поле в JSON — старі консьюмери, які не очікують цього поля, можуть впасти. Schema Registry з режимом BACKWARD гарантує, що нова схема сумісна з попередніми версіями. Це рятує від downtime. Наш досвід: більше 50 проєктів з Kafka, і жоден не обходився без Registry. Впровадження Schema Registry скорочує час на налагодження інцидентів на 80%, що економить від 200 000 до 500 000 гривень на рік.

Встановлення та базова настройка

Типовий сетап через Docker Compose:

version: '3.8' services: schema-registry: image: confluentinc/cp-schema-registry:7.6.0 ports: - "8081:8081" environment: SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: "kafka-1:9092,kafka-2:9092,kafka-3:9092" SCHEMA_REGISTRY_HOST_NAME: schema-registry SCHEMA_REGISTRY_LISTENERS: "http://0.0.0.0:8081" SCHEMA_REGISTRY_KAFKASTORE_TOPIC: "_schemas" SCHEMA_REGISTRY_KAFKASTORE_TOPIC_REPLICATION_FACTOR: 3 SCHEMA_REGISTRY_SCHEMA_COMPATIBILITY_LEVEL: "BACKWARD" SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: PLAINTEXT restart: unless-stopped 

Для продакшену — мінімум 2 екземпляри за балансувальником, один є master. Ми гарантуємо відмовостійкість.

Як вибрати режим сумісності?

Режим Опис Коли використовувати
BACKWARD Нова схема читає дані, записані старою Стандартний вибір для продакшену
FORWARD Стара схема читає дані, записані новою Коли консьюмери оновлюються повільніше за продюсерів
FULL Обидва напрямки Тільки при строгій необхідності
NONE Без перевірок Тільки для розробки, не для продакшену

Ми рекомендуємо BACKWARD для більшості сценаріїв. Він дозволяє додавати поля з default та видаляти поля без default.

Що робити, якщо схеми несумісні?

Якщо CI/CD впав з помилкою несумісності, варіанта два: або відкотити зміну схеми та доопрацювати її, або створити новий топік з новою версією схеми та мігрувати продюсерів/консьюмерів. Schema Registry дозволяє легко відкотити версію, повторно зареєструвавши попередню.

Реєстрація схем через REST API

Після визначення схеми її потрібно зареєструвати в Schema Registry. Використовуємо REST API:

curl -X POST http://schema-registry:8081/subjects/order-events-value/versions \ -H "Content-Type: application/vnd.schemaregistry.v1+json" \ -d '{ "schema": "{\"type\":\"record\",\"name\":\"OrderEvent\",\"namespace\":\"com.example.orders\",\"fields\":[{\"name\":\"event_id\",\"type\":\"string\"},{\"name\":\"order_id\",\"type\":\"long\"},{\"name\":\"status\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"double\"},{\"name\":\"created_at\",\"type\":{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}}]} }' 

Порівняння форматів Avro, Protobuf та JSON Schema

Формат Переваги Недоліки
Avro Компактний бінарний, рідна інтеграція з Confluent Складність без генерації коду
Protobuf Швидший за Avro, підтримується в багатьох мовах Вимагає компіляції .proto в класи
JSON Schema Людиночитаємий, без генерації коду Більший розмір, менше інструментів

Вибір залежить від екосистеми: Avro — стандарт для Kafka, Protobuf — для мікросервісів з gRPC, JSON Schema — для простих інтеграцій. Детальніше в офіційній документації Confluent Schema Registry.

Java-продюсер з інтеграцією Schema Registry

Для Java використовуємо KafkaAvroSerializer. Додайте залежність в pom.xml:

<dependency> <groupId>io.confluent</groupId> <artifactId>kafka-avro-serializer</artifactId> <version>7.6.0</version> </dependency> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> <version>1.11.3</version> </dependency> 
Properties props = new Properties(); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka-1:9092"); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class); props.put("schema.registry.url", "http://schema-registry:8081"); props.put("auto.register.schemas", false); // В проді — забороняємо автореєстрацію props.put("use.latest.version", true); KafkaProducer<String, OrderEvent> producer = new KafkaProducer<>(props); OrderEvent event = OrderEvent.newBuilder() .setEventId(UUID.randomUUID().toString()) .setOrderId(12345L) .setUserId(67890L) .setStatus(OrderStatus.CREATED) .setCreatedAt(Instant.now().toEpochMilli()) .build(); producer.send(new ProducerRecord<>("order-events", event.getOrderId().toString(), event)); 

Налаштування auto.register.schemas=false та use.latest.version=true — обов'язкове для продакшену, щоб уникнути випадкової реєстрації неперевірених схем.

Як інтегрувати перевірку сумісності в CI/CD?

Перед деплоєм нової версії сервісу запускаємо скрипт перевірки:

#!/bin/bash SCHEMA_FILE="src/main/avro/OrderEvent.avsc" SUBJECT="order-events-value" REGISTRY_URL="http://schema-registry:8081" SCHEMA_JSON=$(jq -c . "$SCHEMA_FILE") RESPONSE=$(curl -s -X POST \ "${REGISTRY_URL}/compatibility/subjects/${SUBJECT}/versions/latest" \ -H "Content-Type: application/vnd.schemaregistry.v1+json" \ -d "{\"schema\": $(echo $SCHEMA_JSON | jq -R .)}") COMPATIBLE=$(echo $RESPONSE | jq -r '.is_compatible') if [ "$COMPATIBLE" != "true" ]; then echo "FAIL: Schema is not compatible: $RESPONSE" exit 1 fi echo "OK: Schema is backward compatible" 

Якщо сумісність порушена — пайплайн падає, несумісна схема не потрапляє в прод.

Що входить в налаштування Schema Registry під ключ

  • Розгортання Schema Registry в production (мінімум 2 ноди)
  • Визначення та реєстрація Avro-схем для всіх топіків
  • Налаштування режимів сумісності (BACKWARD / FORWARD / FULL)
  • Інтеграція продюсерів (Java/Python) з серіалізаторами
  • Додавання перевірки сумісності в CI/CD пайплайн
  • Документування процесу еволюції схем для команди
  • Навчання розробників (1 день)

Термін: від 3 до 5 днів залежно від кількості топіків. Вартість розраховується індивідуально.

Моніторинг та підтримка

Schema Registry експортує метрики Prometheus. Ми налаштовуємо алерти на несумісні зміни та падіння майстра. Гарантуємо: після налаштування жодна несумісна зміна не потрапить в прод. Досвід: понад 5 років роботи з Kafka, 50+ проєктів. Замовте консультацію з вашої архітектури Kafka — ми допоможемо впровадити Schema Registry за 3 дні.