Migration Tool

Arquitectura

La Herramienta de migracion esta construida sobre Scio, el cual es una simplificacion de Apache Beaw, ademas de incluir otras fuentes que no estan soportadas directamente sobre Apache Beam como Azure Table Storage y Azure CosmosDB Core SQL API.

Esta herramienta esta diseñada para correr sobre diferentes motores, como Flink, Spark, Google Dataflow (serverless), Amazon EMR, etc. Pero para el caso de especifico de Telefonica se ah decidido correrlo sobre Flink, debido a que es un motor moderno preparado para correr procesas batch y streaming, ademas de ser nativo de nube por lo que correrlo sobre Kubernetes (AKS) es relativamente sencillo, ademas de ya tener toda la expertice ganada en kubernetes por ser el estandar de cloud.

Kubernetes

Para poder correrlo sobre nube solo se necesita 2 cosas:

  1. Operador de Flink Kubernetes, se hace 1 única vez
  2. Crear 2 descriptores de Kubernetes:
    1. Un secreto con la difinicion del FlinkDeployment, la cadena de conexion, y el script para ejecutar.
    2. Un CronJob que sera el encargado de desplegar el FlinkDeployment usando el script de ejecución a la hora definida dentro del CronJob

Entradas y destinos soportados

Entradas:

  1. MongoDB
  2. Azure CosmosDB Core SQL API
  3. Azure Table Storage
  4. Google BigTable

Destinos

  1. MongoDB
  2. Postgresql
  3. JSon en Azure Blob Storage

Estandares de formato de salida en el Blob Storage

azfs://[tu_storage_accaunt]/[carpetas]/[YYYY-MM-DD_HHMMSS]/[NOMBRE_DE_TABLA]/part-[NOMBRE_DE_TABLA]_YYYY-MM-DD_HHMMSS_00000-of-00006.json  

azfs://[tu_storage_accaunt]/[carpetas]/[YYYY-MM-DD_HHMMSS]/[NOMBRE_DE_TABLA]/part-[NOMBRE_DE_TABLA]_YYYY-MM-DD_HHMMSS_00001-of-00006.json  

azfs://[tu_storage_accaunt]/[carpetas]/[YYYY-MM-DD_HHMMSS]/[NOMBRE_DE_TABLA]/part-[NOMBRE_DE_TABLA]_YYYY-MM-DD_HHMMSS_00002-of-00006.json  

azfs://[tu_storage_accaunt]/[carpetas]/[YYYY-MM-DD_HHMMSS]/[NOMBRE_DE_TABLA]/part-[NOMBRE_DE_TABLA]_YYYY-MM-DD_HHMMSS_00003-of-00006.json  

azfs://[tu_storage_accaunt]/[carpetas]/[YYYY-MM-DD_HHMMSS]/[NOMBRE_DE_TABLA]/part-[NOMBRE_DE_TABLA]_YYYY-MM-DD_HHMMSS_00004-of-00006.json  

azfs://[tu_storage_accaunt]/[carpetas]/[YYYY-MM-DD_HHMMSS]/[NOMBRE_DE_TABLA]/part-[NOMBRE_DE_TABLA]_YYYY-MM-DD_HHMMSS_00005-of-00006.json

Ejemplo: