Immagina un grande rivenditore online che dispone di più sistemi che generano e consumano dati: un sito web di e-commerce, un'app mobile, un motore di raccomandazione, un sistema di gestione dell'inventario, una piattaforma di spedizione e una piattaforma di analisi dei clienti. Ognuno di questi sistemi comunica pubblicando e consumando eventi tramite cluster Apache Kafka utilizzando Confluent Cloud e trasmette tali eventi a un data warehouse tramite Kafka Connect nella sua pipeline dati.
Ogni azione sul sito web genera molteplici eventi nei sistemi del rivenditore. Ogni volta che un cliente effettua un ordine, il sito web pubblica un evento OrderCreated
a un argomento di Kafka.
Diverse applicazioni a valle utilizzano lo stesso evento. Il sistema di gestione dell'inventario riserva gli articoli acquistati, il sistema di pagamento conferma la transazione e il magazzino avvia l'evasione dell'ordine. Il motore di raccomandazione aggiorna le preferenze dei clienti, la piattaforma di analisi registra la vendita e il servizio di notifica invia una conferma via email.
Inizialmente, l'evento OrderCreated
contiene campi come order_id
, customer_id
, product_id
quantity
e total_price
. Tutte le applicazioni di consumo sono costruite per aspettarsi questa struttura.
Ora immagina che, mesi dopo, l'azienda decida di supportare le vendite internazionali. Gli sviluppatori aggiornano il sito web in modo che ogni ordine includa ora due nuovi campi: currency
e exchange_rate
.
Senza un registro degli schemi, non esiste un meccanismo centralizzato per coordinare questo cambiamento. Alcuni consumatori di dati sugli eventi si aspettano i nuovi campi, mentre altri no. Se uno sviluppatore rinomina accidentalmente total_price
in order_total
o cambia il proprio tipo di dato da decimale a stringa, i servizi a valle potrebbero iniziare a fallire inaspettatamente. Il warehouse potrebbe smettere di ricevere gli ordini, le dashboard di analytics potrebbero produrre report errati o le notifiche ai clienti potrebbero non riuscire perché non riescono ad analizzare l'evento.
Quindi, come potrebbe apparire lo stesso scenario con un Confluent Schema Registry per aiutare nella gestione degli schemi?
Prima di distribuire il produttore aggiornato, il team di sviluppo registra una nuova versione dello schema OrderCreated
. Questo genera un nuovo ID schema associato allo schema. Il registro degli schemi verifica le modifiche proposte rispetto alle impostazioni di compatibilità dell'organizzazione.
Se le modifiche proposte rispettano tali regole di compatibilità, la nuova versione dello schema può essere registrata. Se una modifica viola la politica di compatibilità configurata, il registro può rifiutarla prima che le applicazioni inizino a utilizzare lo schema incompatibile.
Ciò significa che gli sviluppatori possono scoprire una modifica sostanziale dello schema durante lo sviluppo anziché dopo la distribuzione. I consumatori esistenti possono continuare a utilizzare le applicazioni con modifiche compatibili, mentre i team di sviluppo possono aggiornare gradualmente le proprie applicazioni per utilizzare i nuovi campi quando saranno pronti.