Как установить и использовать Kafka Schema Registry

Kafka Schema Registry — это отдельный сервис, который помогает обеспечить единообразие формата сообщений в Apache Kafka. Давайте посмотрим, как его установить и использовать в реальных сценариях.

Варианты установки

  1. Docker / Docker Compose
    Самый быстрый способ попробовать — использовать образы Confluent. Пример docker-compose.yml:
version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.5.0
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181

  kafka:
    image: confluentinc/cp-kafka:7.5.0
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

  schema-registry:
    image: confluentinc/cp-schema-registry:7.5.0
    environment:
      SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: PLAINTEXT://kafka:9092
      SCHEMA_REGISTRY_LISTENERS: http://0.0.0.0:8081
    ports:
      - "8081:8081"

Запуск:

docker-compose up -d
  1. Helm в Kubernetes Можно использовать официальный Helm-чарт Confluent:
helm repo add confluentinc https://packages.confluent.io/helm
helm install schema-registry confluentinc/cp-schema-registry
  1. Запуск бинарником Можно скачать дистрибутив Confluent и запустить как отдельный Java-процесс.

Использование Schema Registry Регистрация схемы

Пример Avro-схемы заказа (order.avsc):

{
  "type": "record",
  "name": "Order",
  "fields": [
    {"name": "order_id", "type": "string"},
    {"name": "customer_id", "type": "string"},
    {"name": "total", "type": "double"}
  ]
}

Регистрация через REST API:

curl -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json" \
--data '{"schema": "{\"type\":\"record\",\"name\":\"Order\",\"fields\":[{\"name\":\"order_id\",\"type\":\"string\"},{\"name\":\"customer_id\",\"type\":\"string\"},{\"name\":\"total\",\"type\":\"double\"}]}"}' \
http://localhost:8081/subjects/orders-value/versions

Продюсеры и консьюмеры

  • Продюсеры используют сериализаторы Avro/JSON/Protobuf, которые обращаются к Schema Registry.
  • Консьюмеры автоматически подтягивают схему по ID и десериализуют сообщения.

Пример в Java (упрощённый):

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", StringSerializer.class);
props.put("value.serializer", KafkaAvroSerializer.class);
props.put("schema.registry.url", "http://localhost:8081");

Почему это важно

  • Гарантирует совместимость данных.
  • Уменьшает количество ошибок в продакшене.
  • Позволяет безопасно эволюционировать схемы.

Для DevOps-инженера наличие Schema Registry в составе инфраструктуры Kafka — это гарантия стабильных и предсказуемых дата-пайплайнов.