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

Без контролю схем Kafka-топіки перетворюються на джерело збоїв: одна необережна зміна формату — і споживачі падають. Ми налаштовуємо Schema Registry з підтримкою Avro, Protobuf та JSON Schema, щоб кожна еволюція даних проходила безпечно та передбачувано. Наша команда реалізує проєкт під ключ — від аудиту поточних схем до впровадження та подальшої підтримки, забезпечуючи стабільну роботу вашого пайплайну.

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

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

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

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

Без 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 дні.

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060