L'architecture se concentre sur une Couche de Collecte de Métadonnées Hybride qui instrumente les pipelines de données sans modifier le code de l'application. Les agents de Capture de Données de Changement (CDC) interceptent les schémas des sujets Apache Kafka, les plans d'exécution Apache Spark, et les journaux de requêtes JDBC des bases de données Oracle héritées, émettant des événements de lignée structurés à un bus Apache Pulsar régional.
Un niveau de Traitement de Flux utilisant Apache Flink analyse ces événements pour construire un graphe dynamique de propriétés dans JanusGraph, où les sommets représentent les ensembles de données (tables, sujets, fichiers) et les arêtes capturent la logique de transformation avec une cardinalité au niveau des colonnes. Pour l'automatisation du GDPR, le système maintient un index inversé mappant les signatures PII (par exemple, les hachages d'emails, les numéros de sécurité sociale tokenisés) aux arêtes du graphe en utilisant Apache Lucene.
Lorsqu'une demande de suppression arrive, un Orchestrateur de Saga parcourt le graphe pour identifier les ensembles de données impactés, génère des commandes de vide Delta Lake compensatoires et des événements de pierre tombale Kafka, et les exécute via des workflows Apache Airflow avec des sémantiques d'exécution exacte. La Prédiction d'Impact de Schéma utilise des Réseaux Neuronaux Graphiques (GNN) entraînés sur des modèles historiques de lignée pour simuler le rayon d'explosivité des modifications de schéma Avro proposées, interrogeant le graphe via Gremlin avec un cache Redis agressif pour garantir une latence inférieure à une seconde.
Une institution financière multinationale opérant dans les régions UE, APAC, et US avait du mal à se conformer à l'Article 17 du GDPR lors de sa migration vers la Data Mesh. Les PII clients se propageaient à travers 500+ microservices, des extractions de mainframe héritées, et des entrepôts d'analytique Snowflake.
Lorsqu'un client demandait la suppression de données, des audits manuels nécessitaient trois semaines de traçage SQL à travers les domaines, manquant souvent de capturer des ensembles de données dérivées dans les lacs de données S3. Simultanément, des changements de schéma dans le domaine des Paiements brisaient fréquemment les tableaux de bord de Détection de Fraude dans le domaine de l'Analytique, causant six incidents de production en un trimestre.
Option A proposait un Metastore Apache Hive centralisé avec des analyses de lots Spark nocturnes de tous les schémas de tables. Cela offrait une simplicité et une forte cohérence, mais introduisait une stagnation de 24 heures, violant l'exigence du GDPR "sans retard indu" et ne parvenait pas à capturer les transformations de flux dans les travaux Apache Flink.
Option B suggérait de déployer des sondes eBPF dans le noyau sur tous les nœuds Kubernetes pour capturer les charges utiles TCP brutes pour une inspection approfondie des paquets. Bien que cela fournît une précision en temps réel, cela créait de sérieux risques de confidentialité en enregistrant potentiellement des PII sensibles dans le magasin de lignée, entraînant une surcharge CPU de 40%, et violant les principes de minimisation des données.
Option C, qui a finalement été sélectionnée, mettait en œuvre des agents Log-CDC qui se connectent aux connecteurs Debezium pour les bases de données et aux Intercepteurs Kafka pour les pipelines de streaming. Cela ne capturait que les métadonnées du schéma et la logique de transformation sans inspecter les valeurs de ligne, atteignant une propagation de lignée en moins d'une minute tout en maintenant zéro changement de code d'application. Après déploiement, la latence de suppression GDPR a chuté à moins de 5 minutes, l'analyse d'impact des changements de schéma est devenue proactive avec une précision de prédiction de 85%, et la banque a passé son audit SOC 2 sans constatations concernant la provenance des données.
Comment gérez-vous le suivi de la lignée pour des transformations non déterministes, telles que les Fonctions Définies par l'Utilisateur (UDF) dans Spark ou les transformations Python qui modifient dynamiquement les schémas de colonnes en fonction des appels d'API externes ?
La plupart des candidats supposent que toutes les transformations sont statiques et déclaratives. En réalité, les UDF sont des boîtes noires. La solution nécessite une Analyse Statique du bytecode Python ou des arbres de syntaxe abstraite (AST) Scala pendant le pipeline CI/CD pour extraire les références de colonnes avant le déploiement.
Pour des schémas truly dynamiques (par exemple, l'analyse de blobs JSON avec des clés variées), le système doit mettre en œuvre un Échantillonnage d'Inférence de Schéma, où le collecteur de lignée échantillonne un sous-ensemble d'enregistrements pour mapper probabilistiquement les champs de sortie potentiels aux champs d'entrée, étiquetant ces arêtes avec des scores de confiance dans le graphe.
De plus, des vérifications de Registre de Schéma d'Exécution utilisant le Registre de Schéma Confluent peuvent valider les schémas de sortie réels par rapport à la lignée inférée, signalant des dérives lorsque les UDF modifient leur comportement de manière inattendue.
Comment réconciliez-vous l'exactitude de la lignée lorsque les travaux de traitement de flux gèrent des données arrivant tard avec des marques temporelles d'événements qui provoquent des mises à jour rétroactives des agrégations de fenêtres ?
Les candidats modélisent souvent la lignée comme des DAG immuables, mais Apache Flink et Kafka Streams autorisent le recalcul des fenêtres. L'architecture doit mettre en œuvre un Versionnement Temporel sur les arêtes du graphe, où chaque relation de lignée est horodatée avec la marque temporelle event-time et la version processing-time.
Lorsque des données tardives déclenchent un recalcul, le système crée une nouvelle arête temporelle tout en préservant l'historique, utilisant les horodatages Valide-À/Valide-Jusqu'à. Les requêtes Gremlin doivent ensuite, par défaut, utiliser la tranche temporelle la plus récente tout en prenant en charge les audits historiques.
De plus, la saga de suppression du GDPR doit utiliser des Fenêtres de Rétroaction qui tiennent compte de ces arrivées tardives, garantissant que les suppressions se propagent aux agrégats retraités même si elles se produisent des heures après la fermeture initiale de la fenêtre.
Comment maintenez-vous la cohérence du graphe de lignée lors de déploiements blue-green où les noms de tables physiques ou les noms de sujets Kafka changent, mais les entités de domaine logiques restent constantes ?
Les candidats confondent souvent les identifiants physiques et logiques. La solution nécessite une Couche de Résolution d'Entités Logiques utilisant des Identifiants Permanents (PID) assignés au niveau du domaine via une génération de UUID lors de la provision des infrastructures.
Lorsqu'un échange blue-green se produit (par exemple, la table orders_v1 est remplacée par orders_v2), l'agent CDC émet un Événement de Renommage vers le bus de lignée plutôt que de créer un sous-graphe déconnecté. Le modèle JanusGraph doit soutenir des Supernodes représentant des ensembles de données logiques avec des arêtes vers des incarnations physiques étiquetées avec des étiquettes de déploiement.
L'Orchestrateur de Saga utilise ces pointeurs logiques pour garantir que les suppressions GDPR suivent l'incarnation physique active tout en préservant la lignée historique pour la version retirée, empêchant ainsi la génération de métadonnées orphelines lors de cycles de déploiement rapides.