La arquitectura se centra en una Capa de Recolección de Metadatos Híbrida que instrumenta tuberías de datos sin modificar el código de la aplicación. Los agentes de Captura de Datos de Cambio (CDC) interceptan los esquemas de temas de Apache Kafka, los planes de ejecución de Apache Spark y los registros de consultas JDBC de bases de datos heredadas Oracle, emitiendo eventos de linaje estructurados a un bus regional de Apache Pulsar.
Un nivel de Procesamiento de Flujos que usa Apache Flink analiza estos eventos para construir un gráfico de propiedades dinámico en JanusGraph, donde los vértices representan conjuntos de datos (tablas, temas, archivos) y los bordes capturan la lógica de transformación con cardinalidad a nivel de columna. Para la automatización del GDPR, el sistema mantiene un índice invertido que mapea las firmas de PII (por ejemplo, hashes de correos electrónicos, SSNs tokenizados) a los bordes del gráfico utilizando Apache Lucene.
Cuando llega una solicitud de eliminación, un Orquestador de Saga recorre el gráfico para identificar los conjuntos de datos afectados, genera comandos de vacío de Delta Lake y eventos de lápida de Kafka, y los ejecuta a través de flujos de trabajo de Apache Airflow con semántica de exactamente una vez. La Predicción de Impacto del Esquema aprovecha las Redes Neurales de Grafos (GNN) entrenadas en patrones históricos de linaje para simular el radio de explosión de las modificaciones de esquema propuestas de Avro, consultando el gráfico a través de Gremlin con almacenamiento en caché agresivo de Redis para latencias inferiores a un segundo.
Una institución financiera multinacional que opera en las regiones de UE, APAC y EE. UU. luchaba con el cumplimiento del Artículo 17 del GDPR durante su migración a la Malla de Datos. La PII del cliente se propagaba a través de más de 500 microservicios, extracciones de mainframes heredados y almacenes de análisis Snowflake.
Cuando un cliente solicitaba la eliminación de datos, las auditorías manuales requerían tres semanas de trazado de SQL a través de dominios, a menudo sin detectar los conjuntos de datos derivados en los lagos de datos S3. Al mismo tiempo, los cambios de esquema en el dominio de Pagos rompían frecuentemente los paneles de detección de Fraude en el dominio de Análisis, causando seis incidentes de producción en un trimestre.
Opción A proponía un Metastore de Apache Hive centralizado con escaneos por lotes de Spark nocturnos de todos los esquemas de tablas. Esto ofrecía simplicidad y fuerte consistencia, pero introducía una frescura de 24 horas, violando el requisito de "sin demora indebida" del GDPR y no capturando transformaciones en tiempo real en trabajos de Apache Flink.
Opción B sugería desplegar sondas de núcleo eBPF en todos los nodos de Kubernetes para capturar cargas útiles de TCP en bruto para inspección profunda de paquetes. Si bien esto proporcionaba precisión en tiempo real, creaba graves riesgos de privacidad al potencialmente registrar PII sensible en la tienda de linaje, incurriendo en un 40% de sobrecarga de CPU, y violaba los principios de minimización de datos.
Opción C, que fue seleccionada, implementó agentes Log-CDC que se conectan a conectores Debezium para bases de datos y Interceptores de Kafka para tuberías de transmisión. Esto capturó solo metadatos de esquema y lógica de transformación sin inspeccionar valores de fila, logrando una propagación de linaje de menos de un minuto mientras mantenía cero cambios en el código de la aplicación. Después de la implementación, la latencia de eliminación del GDPR se redujo a menos de 5 minutos, el análisis de impacto de cambios de esquema se volvió proactivo con una precisión de predicción del 85%, y el banco pasó su auditoría SOC 2 con cero hallazgos en lo que respecta a la procedencia de datos.
¿Cómo maneja el seguimiento del linaje para transformaciones no determinísticas, como Funciones Definidas por el Usuario (UDFs) en Spark o transformaciones en Python que alteran dinámicamente los esquemas de columnas basados en llamadas API externas?
La mayoría de los candidatos asumen que todas las transformaciones son estáticas y declarativas. En realidad, los UDFs son cajas negras. La solución requiere un Análisis Estático de los bytecodes de Python o árboles de sintaxis abstracta (AST) de Scala durante la pipeline de CI/CD para extraer referencias de columnas antes de la implementación.
Para esquemas verdaderamente dinámicos (por ejemplo, análisis de blobs de JSON con claves variables), el sistema debe implementar Muestreo de Inferencia de Esquema, donde el recolector de linaje muestrea un subconjunto de registros para mapear probabilísticamente los posibles campos de salida a los campos de entrada, etiquetando estos bordes con puntajes de confianza en el gráfico.
Además, las comprobaciones de Registro de Esquema en Tiempo de Ejecución utilizando el Registro de Esquema Confluent pueden validar los esquemas de salida reales contra el linaje inferido, señalando desviaciones cuando los UDFs cambian su comportamiento inesperadamente.
¿Cómo reconciliar la precisión del linaje cuando los trabajos de procesamiento de flujos manejan datos que llegan tarde con marcas de tiempo que causan actualizaciones retroactivas a las agregaciones en ventanas?
Los candidatos a menudo modelan el linaje como DAGs inmutables, pero Apache Flink y Kafka Streams permiten el recálculo de ventanas. La arquitectura debe implementar Versionado Temporal en los bordes del gráfico, donde cada relación de linaje está marcada con la marca de tiempo de evento y la versión de tiempo de procesamiento.
Cuando datos tardíos activan un recálculo, el sistema crea un nuevo borde temporal mientras preserva el histórico, utilizando marcas de tiempo de Válido-Desde/Válido-Hasta. Las consultas de Gremlin deben por defecto a la última rebanada temporal pero admitir auditorías históricas.
Además, la saga de eliminación del GDPR debe usar Ventanas de Retroceso que consideren estas llegadas tardías, asegurando que las eliminaciones se propaguen a las agregaciones reprocesadas incluso si ocurren horas después de que la ventana inicial se cerró.
¿Cómo mantiene la consistencia del gráfico de linaje durante implementaciones blue-green donde los nombres de las tablas físicas o los nombres de los temas de Kafka cambian, pero las entidades lógicas del dominio permanecen constantes?
Los candidatos a menudo confunden los identificadores físicos y lógicos. La solución requiere una Capa de Resolución de Entidades Lógicas utilizando Identificadores Persistentes (PIDs) asignados a nivel de dominio mediante generación de UUID durante la provisión de infraestructura.
Cuando ocurre un intercambio blue-green (por ejemplo, la tabla orders_v1 es reemplazada por orders_v2), el agente de CDC emite un Evento de Renombrado al bus de linaje en lugar de crear un subgráfico desconectado. El modelo de JanusGraph debe soportar Supernodos que representan conjuntos de datos lógicos con bordes a encarnaciones físicas etiquetadas con etiquetas de despliegue.
El Orquestador de Saga utiliza estos punteros lógicos para asegurar que las eliminaciones del GDPR sigan la encarnación física activa mientras preserva el linaje histórico para la versión retirada, evitando metadatos huérfanos durante ciclos de implementación rápidos.