Schema Registry — Apicurio
¿Qué es Apicurio Registry?
Apicurio Registry es un schema registry open source que almacena y gestiona esquemas de datos y APIs. Es parte del ecosistema de Streams for Apache Kafka.
Formatos soportados:
-
Apache Avro
-
JSON Schema
-
Protobuf
-
OpenAPI
-
AsyncAPI
-
GraphQL
-
WSDL / XML Schema
¿Por qué un Schema Registry?
En un pipeline CDC, los eventos que Debezium produce tienen una estructura definida. Sin un schema registry:
-
Los consumidores no saben qué formato esperar
-
Cambios en la estructura de las tablas pueden romper consumidores
-
No hay validación de datos en tránsito
Con Apicurio Registry:
-
Los schemas se registran y versionan centralmente
-
Los productores validan contra el schema antes de enviar
-
Los consumidores obtienen el schema automáticamente
-
Evolución de schemas compatible (forward, backward, full)
Despliegue en OpenShift
apiVersion: registry.apicur.io/v1
kind: ApicurioRegistry
metadata:
name: apicurio-registry
namespace: kafka-cdc
spec:
configuration:
persistence: kafkasql
kafkasql:
bootstrapServers: cdc-cluster-kafka-bootstrap.kafka-cdc.svc:9092
deployment:
replicas: 1
El storage kafkasql usa Kafka como backend de persistencia — no requiere base de datos adicional.
Acceso a la UI
La interfaz web de Apicurio Registry está disponible en:
Desde ahí podes:
-
Explorar schemas registrados
-
Ver versiones y compatibilidad
-
Registrar nuevos schemas manualmente
-
Ver el contenido de cada schema
Integración con Debezium
Para usar Apicurio como serializer en Debezium, se configura el converter en KafkaConnect:
config:
key.converter: io.apicurio.registry.utils.converter.AvroConverter
key.converter.apicurio.registry.url: http://apicurio-registry-service.kafka-cdc.svc:8080/apis/registry/v2
key.converter.apicurio.registry.auto-register: "true"
value.converter: io.apicurio.registry.utils.converter.AvroConverter
value.converter.apicurio.registry.url: http://apicurio-registry-service.kafka-cdc.svc:8080/apis/registry/v2
value.converter.apicurio.registry.auto-register: "true"
| En este demo usamos JSON converter por simplicidad, pero la integración con Avro via Apicurio está lista para habilitarse. |
How it Works
Ciclo de validación de schemas
El Schema Registry actúa como un contrato vivo entre productores y consumidores:
-
Un producer (Debezium, Camel) serializa un mensaje y envía el schema al registry (si
auto-register=true). -
Apicurio valida el schema contra las reglas globales configuradas:
-
VALIDITY — el schema debe ser sintácticamente correcto (JSON Schema válido, Avro válido, etc.)
-
COMPATIBILITY — el schema debe ser compatible con la versión anterior según la política elegida
-
-
Si la validación pasa, Apicurio asigna un globalId numérico al schema y lo almacena.
-
El producer incluye el
globalIden el header del mensaje Kafka (no el schema completo — esto ahorra bandwidth). -
Un consumer recibe el mensaje, extrae el
globalIddel header, y obtiene el schema completo desde Apicurio para deserializar. -
Si el producer intenta registrar un schema incompatible (ej: eliminar un campo requerido), Apicurio rechaza el registro con HTTP 409, previniendo el breaking change antes de que llegue a Kafka.
Modos de compatibilidad
| Modo | Garantía |
|---|---|
BACKWARD |
Consumidores con schema nuevo pueden leer datos escritos con schema viejo. Permite agregar campos opcionales. |
FORWARD |
Consumidores con schema viejo pueden leer datos escritos con schema nuevo. Permite eliminar campos opcionales. |
FULL |
Combinación de BACKWARD + FORWARD. Solo permite agregar o eliminar campos opcionales. |
NONE |
Sin validación de compatibilidad — útil en desarrollo, riesgoso en producción. |
API REST del Registry
Apicurio Registry expone una API REST completa:
# Listar artifacts
curl -s https://apicurio-registry-kafka-cdc.apps.<domain>/apis/registry/v2/groups/default/artifacts
# Registrar un schema
curl -X POST https://apicurio-registry-kafka-cdc.apps.<domain>/apis/registry/v2/groups/default/artifacts \
-H "Content-Type: application/json; artifactType=JSON" \
-H "X-Registry-ArtifactId: customer-schema" \
-d '{
"type": "object",
"properties": {
"id": {"type": "integer"},
"first_name": {"type": "string"},
"last_name": {"type": "string"},
"email": {"type": "string", "format": "email"}
},
"required": ["id", "first_name", "last_name", "email"]
}'
Documentación Oficial
-
Red Hat build of Apicurio Registry — Instalación, configuración y operación del Schema Registry
-
Apicurio Registry Documentation — Documentación del proyecto upstream
-
Apicurio Registry 3.x Guide — Guía de referencia de la última versión
-
Deploying Apicurio on OpenShift — Despliegue con operador en OpenShift
-
JSON Schema Specification — Especificación oficial de JSON Schema
-
Apache Avro Specification — Especificación oficial de Avro