Replicar datos desde una base de datos SQL Server hacia la nube de Google en casi tiempo real es uno de los casos de uso más demandados en arquitecturas de datos modernas. A continuación se detalla, paso a paso, cómo configurar los servicios de Google Cloud necesarios para construir un pipeline de ingesta confiable que conecta SQL Server con CDC, Apache Debezium, Apache Kafka, Pub/Sub, DataFlow y BigQuery.
¿Cómo funciona la arquitectura de replicación en casi tiempo real?
La idea central es capturar los cambios que ocurren en una base de datos SQL Server configurada con CDC (Change Data Capture), una funcionalidad que registra inserciones, actualizaciones y eliminaciones en las tablas habilitadas. Esos eventos son detectados por Apache Debezium [0:27], un framework de código abierto especializado en captura de datos de cambio. Debezium trabaja como conector dentro de Apache Kafka, redirigiendo cada evento hacia la plataforma serverless de Google Cloud.
El flujo completo es:
- SQL Server genera eventos de cambio gracias a CDC.
- Debezium captura esos eventos y los publica en Kafka.
- Kafka envía los mensajes en formato JSON a Pub/Sub.
- DataFlow procesa los mensajes recibidos.
- Los datos llegan finalmente a una tabla de BigQuery.
¿Qué servicios de Google Cloud se configuran y en qué orden?
¿Cómo crear un tópico en Pub/Sub?
El primer servicio que se configura es Pub/Sub [1:06], el servicio totalmente administrado de mensajería de Google que permite implementar patrones de publish and subscribe mediante tópicos. Al crear un tópico —por ejemplo, "from Kafka"— se dispone de opciones de encriptación: utilizar las llaves administradas por Google o bien llaves personalizadas del cliente (Customer-Managed Encryption Keys). Una vez creado el tópico, ya es posible recibir mensajes [1:37].
¿Cómo configurar un job en DataFlow con plantillas predefinidas?
El siguiente paso es crear un job en DataFlow [1:49], el servicio que procesa los mensajes provenientes de Pub/Sub. Una ventaja importante de DataFlow es que ofrece plantillas predefinidas que aceleran la integración de casos de uso comunes. Para esta demostración se selecciona la plantilla Cloud Pub/Sub Topic to BigQuery [2:17].
La plantilla solicita tres parámetros de configuración:
- Nombre del tópico de Pub/Sub: se copia directamente desde la consola de Pub/Sub [2:48].
- Tabla destino en BigQuery: debe respetar el formato
proyecto:dataset.tabla. Desde la consola de BigQuery, el botón Query Table autocompleta la metadata de la tabla, y solo es necesario ajustar el separador entre proyecto y dataset a dos puntos [3:07].
- Ubicación temporal en Google Cloud Storage: un bucket donde DataFlow persiste temporalmente los mensajes antes de escribirlos en BigQuery. Se copia el enlace desde la vista Overview del bucket y se le agrega la subcarpeta deseada, por ejemplo
/pubsub/temp [3:32].
¿Qué sucede al ejecutar el job de DataFlow?
Al dar clic en Run Job [3:57], DataFlow construye automáticamente un DAG (Direct Acyclic Graph), que es la representación visual del flujo de procesamiento generado internamente. Este grafo acíclico dirigido muestra cada transformación que se aplica a los datos, desde la lectura en Pub/Sub hasta la escritura en BigQuery.
DataFlow está basado en el programming model de Apache Beam [4:11], lo que significa que por detrás se genera código compatible con APIs de Java, Python u otros lenguajes soportados, sin que el usuario necesite escribirlo manualmente al usar plantillas.
¿Qué falta para completar el pipeline de ingesta?
Con los servicios de Google Cloud configurados —Pub/Sub, DataFlow, BigQuery y Cloud Storage— resta la pieza que conecta la fuente de datos con la nube. Apache Debezium [4:37] es el componente encargado de leer los eventos de CDC desde SQL Server, convertirlos a formato JSON y enviarlos a Pub/Sub a través de Kafka. Desde ahí, DataFlow los procesa y los deposita en la tabla de BigQuery.
Si te interesa conocer el detalle de la configuración de Debezium y la captura real de eventos desde SQL Server, comparte tus dudas y experiencias en los comentarios.