Imaginez un grand détaillant en ligne disposant de plusieurs systèmes générant et consommant des données : un site d’e-commerce, une application mobile, un moteur de recommandations, un système de gestion des stocks, une plateforme d’expédition et une plateforme d’analyse client. Chacun de ces systèmes communique en publiant et en consommant des événements via des clusters Apache Kafka utilisant Confluent Cloud et diffuse ces événements vers un entrepôt de données en utilisant Kafka Connect dans son pipeline de données.
Chaque action sur le site Web génère plusieurs événements dans les systèmes du détaillant. Chaque fois qu’un client passe une commande, le site Web publie un événement OrderCreated
dans une rubrique Kafka.
Plusieurs applications en aval consomment le même événement. Le système de gestion des stocks réserve les articles achetés, le système de paiement confirme la transaction et l’entrepôt commence le traitement de la commande. Le moteur de recommandation met à jour les préférences du client, la plateforme analytique enregistre la vente et le service de notification envoie une confirmation par e-mail.
Initialement, l’événement OrderCreated
contient des champs tels que order_id
, customer_id
, product_id
, quantity
et total_price
. Toutes les applications Consommateur sont conçues pour s’attendre à cette structure.
Imaginez maintenant que, quelques mois plus tard, l’entreprise décide de prendre en charge les ventes à l’international. Les développeurs mettent à jour le site Web afin que chaque commande inclue désormais deux nouveaux champs : currency
et exchange_rate
.
Sans registre de schémas, il n’existe aucun mécanisme centralisé pour coordonner ce changement. Certains consommateurs de données d’événements s’attendent à ces nouveaux champs, tandis que d’autres non. Si un développeur renomme total_price par erreur
en order_total
ou change son type de données d’une décimale à une chaîne, les services en aval risquent de tomber en panne de manière inattendue. L’entrepôt peut cesser de recevoir les commandes, les tableaux de bord analytiques peuvent produire des rapports incorrects ou les notifications clients peuvent ne pas aboutir, car elles ne peuvent pas analyser l’événement.
Alors, à quoi pourrait ressembler le même scénario avec un registre de schémas Confluent destiné à faciliter la gestion des schémas ?
Avant de déployer le producteur mis à jour, l’équipe de développement enregistre une nouvelle version du schéma OrderCreated
. Cela génère un nouvel identifiant de schéma associé au schéma. Le registre des schémas compare les modifications proposées aux paramètres de compatibilité de l’entreprise.
Si les modifications proposées respectent ces règles de compatibilité, la nouvelle version du schéma peut être enregistrée. Si une modification enfreint la politique de compatibilité configurée, le registre peut la rejeter avant que les applications ne commencent à utiliser le schéma incompatible.
Cela signifie que les développeurs peuvent détecter les ruptures de schéma pendant le développement, et non après le déploiement. Les consommateurs existants peuvent continuer à fonctionner avec les modifications compatibles, tandis que les équipes de développement peuvent progressivement mettre à jour leurs applications pour utiliser de nouveaux champs lorsqu’elles sont prêtes.