¿Qué es un registro de esquemas?

Registro de esquemas, definido

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 aplicación productora y consumidora defina los formatos de los mensajes de forma independiente, un registro de esquemas proporciona una "fuente fiable" compartida sobre cómo se estructuran los datos de eventos.

En Kafka, los eventos suelen serializarse 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 para un tema de Kafka, normalmente incluye el ID del esquema junto con los datos serializados en lugar de incrustar todo el esquema 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 esquemático es importante en un sistema basado en eventos porque ayuda a garantizar que los productores y los consumidores están de acuerdo en la estructura de los datos que se intercambian. Esto apoya la calidad de los datos y su integridad.

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 manteniendo la compatibilidad con las aplicaciones existentes.

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

Registros de esquemas y gobierno de datos

Otro beneficio importante es la mejora del gobierno 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 del esquema
  • 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 de Kafka y consumidores de Kafka. Estos contratos definen no solo la estructura de los datos, sino también las expectativas sobre cómo deben evolucionar esos datos con el 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 fiabilidad 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 antiguos, crear una composición estructurada en los esquemas y estandarizar los nombres de los 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 con el tiempo, el registro también puede aplicar comprobaciones de compatibilidad a las nuevas versiones del esquema 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 una gran empresa de venta online que cuenta con múltiples sistemas que generan y consumen datos: una página 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íos y una plataforma de análisis de clientes. Cada uno de estos sistemas se comunica publicando y consumiendo eventos a través de clústeres de Apache Kafka utilizando Confluent Cloud y transmite esos eventos a un almacén de datos mediante 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 OrderCreated a 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 análisis registra la venta y el servicio de notificación al cliente envía un correo electrónico de confirmación.

Inicialmente, el evento OrderCreated contiene campos como order_id , customer_id , product_id , quantity y total_price. Todas las aplicaciones que consumen datos están diseñadas para trabajar con 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 incluya ahora 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 por order_total o modifica su tipo de datos de decimal a cadena, los servicios posteriores podrían empezar a fallar de forma inesperada. El almacén puede dejar de recibir pedidos, los paneles de control de análisis pueden producir informes incorrectos o las notificaciones a los clientes pueden fallar porque no pueden analizar el evento.

Entonces, ¿cómo se vería ese mismo escenario si se utilizara un Confluent Schema Registry para facilitar la gestión de esquemas?

Antes de implementar el productor actualizado, el equipo de desarrollo registra una nueva versión del esquema OrderCreated. Esto genera un nuevo identificador 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 empiecen a utilizar el esquema incompatible.

Esto significa que los desarrolladores pueden descubrir un cambio de esquema importante durante el desarrollo y no después de la implementación. Los consumidores actuales pueden seguir funcionando con los cambios compatibles, mientras que los equipos de desarrollo pueden actualizar gradualmente sus aplicaciones para utilizar 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 crece la empresa. 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 tendría que 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, los esquemas de eventos se convierten en activos gestionados de forma centralizada. Los productores pueden publicar datos de acuerdo con esquemas registrados, los consumidores pueden usar esas definiciones de esquema para interpretar eventos entrantes y las comprobaciones 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 crece, el registro de esquemas proporciona una forma centralizada de gestionar la evolución de los esquemas de eventos 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 los datos correctamente a medida que los esquemas evolucionan. Los principales modos de compatibilidad son la compatibilidad con versiones anteriores, la compatibilidad con versiones posteriores y la compatibilidad total.

  • La compatibilidad con versiones anteriores significa que un consumidor nuevo puede leer los 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 posteriores significa que un consumidor mayor puede leer los datos escritos con un esquema más nuevo. Esto puede ser importante cuando los productores se actualizan antes de que todos los consumidores y las aplicaciones más antiguas deben continuar procesando eventos recién producidos.
  • La compatibilidad total combina la compatibilidad con versiones anteriores y posteriores, por lo que los cambios de esquema deben seguir siendo compatibles en ambas direcciones.

Algunos registros de esquema 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: la compatibilidad con futuras versiones en la práctica

La compatibilidad con versiones anteriores 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 implementadas sigan siendo compatibles con los mensajes que aún generan las versiones anteriores del software productor.

Imagínese una empresa de servicios que opere una red inteligente. Esa red se compone de millones de contadores inteligentes que están instalados en hogares y negocios. Cada uno de ellos publica eventos de uso de electricidad en Apache Kafka. Estos contadores permanecen en servicio durante años y solo pueden recibir actualizaciones de firmware durante ventanas de mantenimiento programadas. Esto significa que muchos contadores continúan produciendo eventos con un esquema antiguo mucho después de que se publiquen las nuevas versiones del software.

Mientras tanto, la empresa de servicios públicos mejora regularmente sus aplicaciones centrales de monitorización y análisis. Una nueva versión de la plataforma de análisis incluye soporte para información adicional, como las métricas de calidad de la energía y la generación de energía renovable. Estos nuevos campos son útiles cuando están disponibles, pero la plataforma debe continuar procesando los datos de los contadores más antiguos que no los envían.

En este escenario, la compatibilidad con versiones anteriores 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 que faltan 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 soportar una flota de dispositivos antiguos de larga duración mientras moderniza los sistemas centrales de procesamiento.

El uso de un registro de esquemas con las reglas de compatibilidad adecuadas permite a la empresa de servicios públicos evolucionar sus esquemas de eventos sin necesidad de actualizaciones simultáneas del firmware para millones de contadores implementados. Esto permite una implementación por fases en la que los productores y los consumidores pueden actualizarse en diferentes momentos sin dejar de cumplir los requisitos de compatibilidad configurados por la organización.

Registros de esquemas y gobierno

Un registro esquemático puede apoyar los esfuerzos de cumplimiento relacionados con las normas de privacidad de datos, como el Reglamento General de Protección de Datos (RGPD) y la Ley de Privacidad del Consumidor de California (CCPA).

Aunque un registro de esquemas no proporciona cumplimiento por sí solo, puede ayudar a las organizaciones a implementar prácticas de gobierno de datos, coherencia y auditoría utilizadas 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 gobierno de datos pueden revisar si cada campo es necesario para el propósito comercial 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 sensibles en los sistemas de producción.

Por ejemplo, si un desarrollador intenta añadir el número de la Seguridad Social o el número del carné de conducir de un cliente a un evento de Kafka existente, el esquema propuesto puede revisarse antes de implementarlo.

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

Control de versiones y auditoría de esquemas

El historial de versiones y esquemas proporciona capacidades de auditoría.

Cada evolución del esquema se registra, 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 forma controlada y rastreable.

Coherencia entre sistemas

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

Dado que los productores y los consumidores se basan en definiciones de esquemas compartidos, las aplicaciones pueden interpretar los campos según definiciones estructurales comunes.

Esto puede reducir el manejo incoherente 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 puede identificar:
  • Qué campos contienen PII
  • Si determinados campos tienen requisitos de seguridad
  • Quién está autorizado a consumir datos concretos
  • Cuánto tiempo deben conservarse los datos

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

Registros de esquemas y herramientas de gobierno más amplias

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

Los metadatos almacenados junto a los esquemas pueden ser utilizados por sistemas 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 gobierno más amplia.

Combinado con cifrado, controles de acceso, políticas de retención de datos y información de registro de auditorías, 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 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 el registro de esquemas de AWS Glue.

Es un registro de esquema 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 puede implementarse 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 streaming compatible con Kafka.

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

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

Preguntas más frecuentes

¿El registro de esquemas forma parte de Apache Kafka?

No, un registro de esquema 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 esquema se utilizan habitualmente junto con Kafka para ayudar a los productores y consumidores a interpretar los datos de eventos estructurados de forma coherente.

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

Un ID de esquema es un identificador de una definición de esquema concreta. Una versión del esquema indica dónde aparece ese esquema en la secuencia de versiones mantenida 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 identificador de esquema y estar asociado a diferentes versiones con diferentes temas.

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

Un registro de esquemas almacena y gestiona principalmente esquemas legibles por máquina que utilizan las aplicaciones para entender 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 como objetivo general ayudar a las personas y a los sistemas a descubrir, comprender y gestionar los activos de datos de toda una organización. Un catálogo puede contener descripciones empresariales, información sobre la 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 tener en cuenta incluyen los formatos de esquema que admite el registro, sus reglas de compatibilidad, la integración con Apache Kafka y otros sistemas de datos, la compatibilidad con API y clientes, las capacidades de seguridad y autenticación, y si el servicio es gestionado o autogestionado.

Las organizaciones también podrían considerar cómo el registro soporta la evolución de esquemas, el gobierno de datos, los metadatos y los contratos de datos, así como su compatibilidad con productores, consumidores y pipelines de datos existentes. Los diferentes productos de registro ofrecen diferentes combinaciones de estas capacidades, por lo que la selección generalmente depende de los sistemas y requisitos que el registro debe respaldar.

Autores

Joshua Noble

Data Scientist

Amanda McGrath

Staff Writer

IBM Think