¿Qué es un registro de esquemas?

Definición de registro de esquemas

Un registro de esquemas es un servicio centralizado que almacena, gestiona y valida los esquemas utilizados para serializar y deserializar los datos intercambiados a través de Apache Kafka. En lugar de permitir que cada productor y aplicación de consumidor defina formatos de mensaje de forma independiente, un registro de esquemas proporciona una “fuente de verdad” compartida sobre cómo se estructuran los datos de eventos.

En Kafka, los eventos a menudo se serializan utilizando formatos como Apache Avro, JSON Schema o Protocol Buffers, a menudo abreviados como protobuf. El registro de esquemas almacena las definiciones de estos formatos y asigna a cada esquema un identificador único. Esto se denomina ID de esquema.

Cuando un productor escribe un mensaje en un tema de Kafka, normalmente incluye el ID de esquema junto con los datos serializados en lugar de realizar la incorporación del esquema completo en cada mensaje. Los consumidores de mensajes recuperan entonces el esquema correspondiente del registro y lo utilizan para deserializar e interpretar correctamente los datos.

¿Por qué es importante un registro de esquemas?

Un registro de esquemas es importante en un sistema basado en eventos porque ayuda a garantizar que los productores y los consumidores estén de acuerdo sobre la estructura de los datos que se intercambian. Esto apoya la calidad y la integridad de los datos.

Sin un registro centralizado, las aplicaciones tendrían que gestionar los esquemas de mensajes de forma independiente. Esto aumenta el riesgo de cambios incompatibles que podrían hacer que los consumidores de eventos fallen o malinterpreten los datos.

El registro de esquemas también admite lo que se denomina evolución de esquemas. Esto permite a los desarrolladores modificar las estructuras de eventos a lo largo del tiempo mientras mantienen la compatibilidad con las aplicaciones existentes.

Por ejemplo, a menudo se puede agregar un nuevo campo opcional sin afectar el formato que esperan los consumidores existentes de Kafka. Las reglas de compatibilidad ayudan a aplicar cambios de esquema seguros antes de que se desplieguen.

Registros de esquemas y gobernanza de datos

Otro beneficio importante es la mejora de la gobernanza de datos. Los esquemas se almacenan en un repositorio central, lo que significa que las organizaciones pueden documentar, revisar, versionar y auditar la estructura de sus datos de eventos.

Este enfoque facilita a los equipos de desarrollo:

  • Descubrir los tipos de eventos disponibles
  • Comprender los formatos de datos
  • Revisar las versiones de esquemas
  • Mantener la coherencia entre sistemas distribuidos

En las plataformas de datos modernas, un registro de esquemas también puede permitir contratos de datos entre productores y consumidores de Kafka. Estos contratos definen no solo la estructura de los datos, sino también las expectativas de cómo deben evolucionar esos datos a lo largo del tiempo.

Al validar los cambios de esquema antes de que se publiquen, un registro de esquemas puede ayudar a evitar que los cambios importantes lleguen a producción y mejorar la confiabilidad de las arquitecturas basadas en eventos.

¿Qué puede gestionar un registro de esquemas?

Un registro de esquemas proporciona un mecanismo centralizado para gestionar esquemas de eventos, hacer cumplir la compatibilidad entre esos esquemas y admitir cambios en esos esquemas.

Un registro también puede permitir a los desarrolladores crear nuevos esquemas a partir de los anteriores, creando una composición estructurada en esquemas y estandarizando los nombres de eventos con una estrategia de nombre de sujeto.

Estos métodos ayudan a las aplicaciones a intercambiar datos a medida que cambian los sistemas y los requisitos.

Cómo funciona un registro de esquemas

Un registro de esquemas funciona almacenando y gestionando los esquemas que definen la estructura de los datos de eventos intercambiados entre productores y consumidores. Cuando un productor envía datos a un tema de Kafka, serializa el mensaje de acuerdo con un esquema registrado e incluye información que permite identificar el esquema correspondiente. Un consumidor puede entonces usar ese esquema para deserializar e interpretar el mensaje correctamente. A medida que los esquemas cambian a lo largo del tiempo, el registro también puede aplicar comprobaciones de compatibilidad a las nuevas versiones de esquemas antes de que se registren, lo que ayuda a los productores y consumidores a continuar trabajando con estructuras de datos en evolución.

Ejemplo: registro de esquemas en la práctica

Imagine un gran minorista en línea que tiene múltiples sistemas que generan y consumen datos: un sitio web de comercio electrónico, una aplicación móvil, un motor de recomendaciones, un sistema de gestión de inventario, una plataforma de envío y una plataforma de analytics de clientes. Cada uno de estos sistemas se comunica publicando y consumiendo eventos a través de clústeres Apache Kafka usando Confluent Cloud y transmite esos eventos a un almacén de datos usando Kafka Connect en su pipeline de datos.

Cada acción en el sitio web genera múltiples eventos en todos los sistemas del minorista. Cada vez que un cliente realiza un pedido, el sitio web publica un evento OrderCreated sobre un tema de Kafka.

Varias aplicaciones posteriores consumen ese mismo evento. El sistema de inventario reserva los artículos comprados, el sistema de pago confirma la transacción y el almacén comienza el cumplimiento. El motor de recomendaciones actualiza las preferencias del cliente, la plataforma de analytics registra la venta y el servicio de notificación al cliente envía una confirmación por correo electrónico.

Inicialmente, el evento OrderCreated contiene campos como order_id , customer_id , product_id , quantity y total_price . Todas las aplicaciones consumidoras están diseñadas para esperar esta estructura.

Ahora imagine que meses después, la empresa decide apoyar las ventas internacionales. Los desarrolladores actualizan el sitio web para que cada pedido ahora incluya dos nuevos campos: currency y exchange_rate .

Sin un registro de esquemas, no existe un mecanismo centralizado para coordinar este cambio. Algunos consumidores de datos de eventos esperan los nuevos campos, mientras que otros no. Si un desarrollador cambia accidentalmente el nombre de total_price a order_total o cambia su tipo de datos de un decimal a una cadena, los servicios posteriores podrían comenzar a fallar inesperadamente. El almacén puede dejar de recibir pedidos, los paneles de analytics pueden producir informes incorrectos o las notificaciones a los clientes pueden fallar porque no pueden analizar el evento.

Entonces, ¿cómo se vería el mismo escenario con un Confluent Schema Registry para ayudar con la gestión de esquemas

Antes de desplegar el productor actualizado, el equipo de desarrollo registra una nueva versión del esquema OrderCreated. Esto genera un nuevo ID de esquema asociado al esquema. El registro de esquemas comprueba los cambios propuestos con la configuración de compatibilidad de la organización.

Si los cambios propuestos cumplen con esas reglas de compatibilidad, se puede registrar la nueva versión del esquema. Si un cambio infringe la política de compatibilidad configurada, el registro puede rechazarlo antes de que las aplicaciones comiencen a usar el esquema incompatible.

Esto significa que los desarrolladores pueden descubrir un cambio radical en el esquema durante el desarrollo en lugar de después del despliegue. Los consumidores existentes pueden continuar funcionando con cambios compatibles, mientras que los equipos de desarrollo pueden actualizar gradualmente sus aplicaciones para usar nuevos campos cuando estén listos.

Gestión de esquemas a escala

Los beneficios de un registro de esquemas se vuelven más significativos a medida que la empresa crece. Cientos de aplicaciones desarrolladas por decenas de equipos de ingeniería podrían intercambiar datos a través de miles de tipos diferentes de eventos.

Sin un registro de esquemas, cada equipo necesitaría coordinar los cambios de esquema manualmente mediante documentación escrita a mano, reuniones o prueba y error. Este proceso manual puede ralentizar el desarrollo y aumentar la probabilidad de que cambios incompatibles lleguen a producción.

Con un registro de esquemas en marcha, los esquemas de eventos se convierten en activos gestionados centralmente. Los productores pueden publicar datos de acuerdo con esquemas registrados, los consumidores pueden usar esas definiciones de esquema para interpretar eventos entrantes y las verificaciones de compatibilidad pueden identificar cambios de esquema incompatibles.

Los nuevos equipos también pueden descubrir definiciones de eventos existentes en lugar de formatos de mensajes de ingeniería inversa, lo que facilita la creación de nuevas aplicaciones y la integración de nuevos sistemas.

A medida que el minorista escala, el registro de esquemas proporciona una manera centralizada de gestionar los esquemas de eventos en evolución entre productores y consumidores.

Modos de compatibilidad de esquemas

La compatibilidad de esquemas determina si las aplicaciones que utilizan diferentes versiones de un esquema pueden continuar intercambiando e interpretando datos correctamente a medida que evolucionan los esquemas. Los principales modos de compatibilidad son compatibilidad con versiones anteriores, compatibilidad con versiones futuras y compatibilidad total.

  • La compatibilidad con versiones anteriores significa que un consumidor más nuevo puede leer datos escritos con un esquema anterior. Esto es útil cuando los consumidores se actualizan después de los productores o cuando las aplicaciones deben continuar procesando datos históricos escritos con versiones anteriores del esquema.
  • La compatibilidad con versiones futuras significa que un consumidor más antiguo puede leer datos escritos con un esquema más reciente. Esto puede ser importante cuando los productores se actualizan antes de que todos los consumidores y las aplicaciones más antiguas deban continuar procesando eventos recién producidos.
  • La compatibilidad total combina la compatibilidad con versiones anteriores y futuras, por lo que los cambios de esquema deben seguir siendo compatibles en ambas direcciones.

Algunos registros de esquemas también admiten versiones transitivas de estos modos de compatibilidad. En lugar de comparar una nueva versión de esquema solo con la versión inmediatamente anterior, las comprobaciones de compatibilidad transitiva la comparan con todas las versiones anteriores relevantes. Las reglas exactas de compatibilidad y los cambios permitidos en el esquema dependen del formato del esquema y de la configuración de compatibilidad del registro.

Ejemplo: compatibilidad con versiones futuras en la práctica

La compatibilidad con versiones futuras es útil cuando los productores más antiguos deben continuar operando mientras que los consumidores más nuevos necesitan procesar datos de esos productores más antiguos sin interrupción. En esta situación, la prioridad es garantizar que las aplicaciones recién desplegadas sigan siendo compatibles con los mensajes que aún generan las versiones anteriores del software del productor.

Imagine una empresa de servicios públicos nacional que opera una red inteligente. Esa red consta de millones de medidores inteligentes que se instalan en hogares y negocios. Cada uno de estos publica eventos de uso de electricidad en Apache Kafka. Estos medidores permanecen en servicio durante años y solo pueden recibir actualizaciones de firmware durante las ventanas de mantenimiento programadas. Esto significa que muchos medidores continúan produciendo eventos usando un esquema anterior mucho después de que se hayan lanzado versiones más nuevas del software.

Mientras tanto, la utilidad actualiza regularmente sus aplicaciones centrales de monitoreo y analytics. Una nueva versión de la plataforma de analytics introduce soporte para información adicional, como métricas de calidad de energía y generación de energía renovable. Estos nuevos campos son útiles cuando están disponibles, pero la plataforma debe continuar procesando datos de medidores más antiguos que no los envían.

En este escenario, la compatibilidad con versiones futuras es más importante que la compatibilidad con una versión anterior porque los consumidores se actualizan primero, mientras que muchos productores permanecen en versiones de esquema más antiguas. El nuevo software de consumo debe ser capaz de leer correctamente los eventos escritos con esquemas más antiguos, aunque esos eventos carezcan de los campos recién introducidos. La aplicación puede tratar los campos faltantes como opcionales o asignar valores predeterminados mientras continúa realizando sus funciones principales.

Si la compatibilidad con versiones anteriores fuera la principal preocupación, los desarrolladores se centrarían en garantizar que los consumidores más nuevos pudieran leer los datos escritos con esquemas de productores más antiguos. Sin embargo, el desafío inmediato de la organización es apoyar una flota de dispositivos antiguos de larga duración mientras se modernizan los sistemas de procesamiento central.

El uso de un registro de esquemas con reglas de compatibilidad adecuadas permite que una utilidad evolucione sus esquemas de eventos sin requerir actualizaciones simultáneas de firmware a millones de medidores desplegados. Esto permite una implementación por fases en la que los productores y los consumidores pueden actualizarse en diferentes momentos mientras se mantienen dentro de los requisitos de compatibilidad configurados de la organización.

Registros de esquemas y gobernanza

Un registro de esquemas puede respaldar los esfuerzos de cumplimiento que involucran regulaciones de privacidad de datos como el Reglamento General de Protección de Datos (RGPD) y la California Consumer Privacy Act (CCPA) .

Aunque un registro de esquemas no proporciona cumplimiento por sí solo, puede ayudar a las organizaciones a implementar prácticas de gobernanza de datos, consistencia y auditoría empleadas para cumplir con los requisitos regulatorios.

Visibilidad de las estructuras de datos

Un beneficio clave es la mejora de la visibilidad de los datos que se procesan.

Cada esquema de eventos se almacena en un repositorio centralizado, que documenta los campos representados en el esquema. Esto proporciona una fuente de información sobre qué datos existen, qué campos específicos representan y cómo las aplicaciones estructuran los datos que producen o consumen.

Esto puede ayudar a las organizaciones a identificar esquemas que contienen información de identificación personal (PII), como nombres, direcciones de correo electrónico o números de cuenta.

Revisión de esquemas y minimización de datos

Un registro de esquemas también puede admitir la minimización de datos, que es un principio del RGPD.

Antes de que se apruebe un esquema, los desarrolladores y los equipos de gobernanza de datos pueden revisar si cada campo es necesario para el propósito de negocio previsto. Este proceso de revisión puede ayudar a evitar que las aplicaciones recopilen o compartan información personal innecesaria.

La validación de esquemas también puede ayudar a prevenir cambios no autorizados o accidentales que introduzcan datos nuevos y confidenciales en los sistemas de producción.

Por ejemplo, si un desarrollador intenta agregar el número de Seguro Social o el número de licencia de conducir de un cliente a un evento existente de Kafka, el esquema propuesto se puede revisar antes de desplegarlo.

Este enfoque crea un punto de control adicional de gobernanza junto con las pruebas normales de aplicaciones.

Control de versiones y auditoría de esquemas

El control de versiones y el historial de esquemas proporcionan capacidades de auditoría.

Se registra cada evolución del esquema, lo que permite a las organizaciones determinar cuándo se agregaron, modificaron o eliminaron campos.

Durante una auditoría de cumplimiento, este historial puede ayudar a demostrar que las estructuras de datos se gestionan de manera controlada y rastreable.

Consistencia entre sistemas

Un registro de esquemas también puede mejorar la consistencia entre varios sistemas.

Debido a que los productores y consumidores dependen de definiciones de esquemas compartidos, las aplicaciones pueden interpretar los campos de acuerdo con definiciones estructurales comunes.

Esto puede reducir el manejo inconsistente de datos entre aplicaciones.

Contratos de datos y metadatos

Muchas organizaciones utilizan un registro de esquemas como parte de la implementación de contratos de datos.

Estos contratos definen no solo la estructura de un evento, sino también los metadatos sobre los datos que contiene.

  • Un contrato de datos podría identificar:
  • Qué campos contienen PII
  • Si determinados campos tienen requisitos de seguridad
  • Quién está autorizado a consumir datos particulares
  • Cuánto tiempo deben conservarse los datos

Luego, la validación automatizada se puede utilizar para verificar si las nuevas versiones del esquema continúan cumpliendo con los requisitos definidos.

Registros de esquemas y herramientas de gobernanza más amplias

Los registros de esquemas también pueden integrarse con herramientas más amplias de gobernanza de datos y seguridad.

Los metadatos almacenados junto con esquemas pueden ser utilizados por sistemas tales como:

  • Catálogos de datos
  • Sistemas de control de acceso
  • Herramientas de seguimiento de linaje
  • Plataformas de cumplimiento

Por tanto, un registro de esquemas puede formar un componente de una arquitectura de gobernanza más amplia.

En combinación con el cifrado, los controles de acceso, las políticas de retención de datos y el registro de auditoría, la gestión de esquemas puede ayudar a las organizaciones a gestionar cómo se recopilan, procesan y comparten los datos personales.

Servicios que ofrecen un registro de esquemas

Varias plataformas proporcionan capacidades de registro de esquemas para Kafka y sistemas de datos relacionados.

Confluent Schema Registry

Confluent Schema Registry es un registro de esquemas específico de Kafka ampliamente utilizado.

Forma parte del sistema Confluent y está disponible tanto como componente autogestionado de la plataforma Confluent como servicio gestionado en Confluent Cloud.

Es compatible con Avro, Protobuf y JSON Schema y proporciona control de versiones de esquemas, reglas de compatibilidad, validación e integración con productores y consumidores de Kafka.

AWS Glue Schema Registry

Amazon Web Services proporciona AWS Glue Schema Registry.

Es un registro de esquemas gestionado que se integra con Apache Kafka, Amazon Managed Streaming for Apache Kafka (MSK), Amazon Kinesis, Amazon Managed Service for Apache Flink y AWS Lambda.

Es compatible con Avro, JSON Schema y Protobuf.

Apicurio Registry

Apicurio Registry es un registro de esquemas y artefactos de API de código abierto que puede usarse con Kafka.

Admite formatos como Avro, JSON Schema y Protobuf y se puede desplegar en entornos como Kubernetes.

Apicurio también proporciona compatibilidad con la API de Confluent Schema Registry, lo que puede facilitar su uso con aplicaciones Kafka diseñadas en torno a las interfaces de registro de esquemas de Confluent.

Redpanda Schema Registry

Redpanda también incluye un servicio compatible con Schema Registry como parte de su plataforma de transmisión compatible con Kafka.

Este enfoque puede ser útil cuando una organización usa Redpanda en lugar de Apache Kafka directamente, ya que la gestión de esquemas puede proporcionarse como parte de la propia plataforma de transmisión.

El registro de Redpanda está más estrechamente integrado en una plataforma de transmisión alternativa compatible con Kafka.

Preguntas frecuentes

¿Un registro de esquemas es parte de Apache Kafka?

No, un registro de esquemas no forma parte del software principal de Apache Kafka. Kafka almacena y transporta registros. Un registro de esquemas es un servicio independiente que almacena y gestiona esquemas para los datos que contienen esos registros. Los registros de esquemas se emplean comúnmente junto con Kafka para ayudar a productores y consumidores a interpretar datos estructurados de eventos de forma consistente.

¿Cuál es la diferencia entre un ID de esquema y una versión de esquema?

Un ID de esquema es un identificador para una definición de esquema particular. Una versión de esquema indica dónde aparece ese esquema en la secuencia de versiones mantenidas para un esquema o tema en particular. La implementación exacta varía según el registro. En Confluent Schema Registry, por ejemplo, un ID de esquema identifica de forma única el esquema en el registro, mientras que la versión pertenece a un sujeto. Por lo tanto, el mismo esquema puede tener el mismo ID de esquema mientras está asociado con diferentes versiones bajo diferentes temas.

¿Cuál es la diferencia entre un registro de esquemas y un catálogo de datos?

Un registro de esquema almacena y gestiona principalmente esquemas legibles por máquina utilizados por las aplicaciones para comprender la estructura de los datos. También puede proporcionar capacidades como el control de versiones de esquemas y las comprobaciones de compatibilidad.

Un catálogo de datos tiene un enfoque más amplio en ayudar a personas y sistemas a descubrir, comprender y gobernar los activos de datos en toda una organización. Un catálogo puede contener descripciones de empresas, información de propiedad, clasificaciones y otros metadatos sobre conjuntos de datos y sistemas de datos. Por lo tanto, los registros de esquemas y los catálogos de datos pueden complementarse entre sí. El registro gestiona los esquemas utilizados por las aplicaciones, mientras que el catálogo proporciona información más amplia sobre los activos de datos de la organización.

¿Cuál es la diferencia entre un esquema y un contrato de datos?

Un esquema define la estructura de los datos, incluidos elementos como campos y tipos de datos. Un contrato de datos puede incluir el esquema, pero también definir expectativas más amplias entre los productores de datos y los consumidores. Un esquema puede ser un componente de un contrato de datos, junto con las restricciones de integridad, los metadatos y las políticas.

¿Cómo eligen las organizaciones un registro de esquema?

El registro de esquemas adecuado depende de los requisitos técnicos de la organización y de la arquitectura de datos existente. Los factores a considerar incluyen los formatos de esquema que admite el registro, sus reglas de compatibilidad, la integración con Apache Kafka y otros sistemas de datos, API y soporte al cliente, capacidades de seguridad y autenticación, y si el servicio es gestionado o autogestionado.

Las organizaciones también pueden considerar cómo el registro respalda la evolución del esquema, la gobernanza de datos, los metadatos y los contratos de datos, así como su compatibilidad con los productores, consumidores y pipelines de datos existentes. Los diferentes productos de registro proporcionan diferentes combinaciones de estas capacidades, por lo que la selección generalmente depende de los sistemas y requisitos que el registro debe admitir.

Autores

Joshua Noble

Data Scientist

Amanda McGrath

Staff Writer

IBM Think