Как установить и использовать Kafka Schema Registry
Kafka Schema Registry — это отдельный сервис, который помогает обеспечить единообразие формата сообщений в Apache Kafka. Давайте посмотрим, как его установить и использовать в реальных сценариях.
Варианты установки
- 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
- Helm в Kubernetes Можно использовать официальный Helm-чарт Confluent:
helm repo add confluentinc https://packages.confluent.io/helm
helm install schema-registry confluentinc/cp-schema-registry
- Запуск бинарником Можно скачать дистрибутив 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 — это гарантия стабильных и предсказуемых дата-пайплайнов.