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.