Skip to content

Dataflow

Google Cloud Dataflow es un servicio de procesamiento de datos que ejecuta pipelines Apache Beam para procesamiento batch y streaming en la arquitectura de Solvento.

Descripción

Dataflow permite procesar grandes volúmenes de datos de manera distribuida y escalable. Soporta tanto procesamiento batch (por lotes) como streaming (tiempo real) usando el framework Apache Beam.

Flujo de Datos

graph TB
    subgraph fuentes["Fuentes de Datos"]
        PubSub[Pub/Sub]
        Storage[Cloud Storage]
        BigQueryRead[BigQuery Read]
    end

    subgraph dataflow["Dataflow"]
        Pipeline[Pipeline Apache Beam]
        Transform[Transformaciones]
    end

    subgraph destinos["Destinos"]
        BigQueryWrite[BigQuery Write]
        ELK[ELK<br/>Elasticsearch]
        PubSubOut[Pub/Sub Output]
        StorageOut[Cloud Storage]
    end

    PubSub --> Pipeline
    Storage --> Pipeline
    BigQueryRead --> Pipeline

    Pipeline --> Transform

    Transform --> BigQueryWrite
    Transform --> ELK
    Transform --> PubSubOut
    Transform --> StorageOut

Recursos

Jobs de Dataflow

Los jobs de Dataflow procesan datos desde Pub/Sub y escriben a BigQuery (solvento-data-prod). Documenta aquí los jobs activos:

Jobs desde Pub/Sub (Streaming)

Job Name Pub/Sub Topic Subscription Tipo Estado
invoices-webhook-prod-20251203-154624 invoices-webhook-prod invoices-webhook-subscription Streaming Activo
buro-webhook-prod-20251204-124756 buro-webhook-prod buro-webhook-subscription Streaming Activo
items-api-prod-20251120-135100 items-api-topic items-api-subscription Streaming Activo
invoices-api-prod-* invoices-api-prod invoices-api-subscription Streaming Activo
cp-api-multischema-prod-20251205-191037 cp-api-prod cp-api-prod-subscription-cloud-run Streaming Activo
tax-compliance-api-multischema-prod-20251210-183338 tax-compliance-api-prod tax-compliance-api-prod-sub Streaming Activo
insights-sales-revenue-customers-daily-20251203-154949 insights-topic-prod insights-topic-prod-sub Streaming Activo

Nota: Los nombres de jobs incluyen timestamps, por lo que pueden variar entre ejecuciones. Los jobs activos se pueden listar con:

gcloud dataflow jobs list --region=us-central1 --status=active --project=solvento-data-prod

Jobs Batch

Job Name Fuente Destino BigQuery Frecuencia Estado
job-name-1 Cloud Storage / BigQuery dataset.table Diario / Semanal Activo

Nota: Los jobs batch pueden leer desde Cloud Storage o BigQuery, pero siempre escriben a solvento-data-prod.

Templates de Dataflow

Los templates permiten reutilizar pipelines. Los templates se gestionan mediante un sistema unificado de despliegue.

Templates disponibles: - invoices-webhook: Procesa webhooks de invoices → BigQuery + ELK - invoices-api: Procesa API de invoices → BigQuery + ELK - items-api: Procesa API de items → BigQuery - cp-api-multischema: Procesa CP API con múltiples schemas - tax-compliance: Procesa datos de tax compliance

Templates disponibles: - invoices-webhook: Procesa webhooks de invoices → BigQuery + ELK - invoices-api: Procesa API de invoices → BigQuery + ELK - items-api: Procesa API de items → BigQuery - cp-api-multischema: Procesa CP API con múltiples schemas - tax-compliance: Procesa datos de tax compliance

Ver arquitectura de templates → | Ver despliegue de templates →

Configuraciones Relevantes

Tipo de Procesamiento

  • Batch: Procesamiento por lotes de datos históricos
  • Streaming: Procesamiento en tiempo real de datos continuos

Recursos

  • Machine Type: Tipo de máquina virtual utilizada
  • Max Workers: Número máximo de workers
  • Disk Size: Tamaño de disco por worker

Autoscaling

  • Configuración de autoscaling basado en carga

Templates

Los templates de Dataflow permiten reutilizar pipelines. En Solvento se utilizan principalmente templates para procesar mensajes de Pub/Sub hacia BigQuery.

Templates comunes: - Pub/Sub to BigQuery: Template para consumir mensajes de Pub/Sub y escribir a BigQuery - Pub/Sub Text to BigQuery: Template para procesar mensajes de texto desde Pub/Sub - Templates personalizados: Templates específicos desarrollados para casos de uso particulares

Uso de templates:

gcloud dataflow jobs run JOB_NAME \
  --gcs-location=gs://BUCKET/templates/TEMPLATE_NAME \
  --parameters=inputTopic=projects/solvento-data-prod/topics/TOPIC_NAME,outputTable=PROJECT:DATASET.TABLE

Relaciones con Otros Componentes

Fuentes de Entrada

  • Pub/Sub: Consume mensajes para procesamiento streaming
  • Cloud Storage: Lee archivos para procesamiento batch
  • BigQuery: Lee tablas para transformaciones

Destinos de Salida

  • BigQuery (solvento-data-prod): Escribe datos raw procesados
  • ELK (Elasticsearch): Escribe datos para búsqueda y análisis en tiempo real (específicamente invoices desde webhook y API)
  • Pub/Sub: Publica resultados para procesamiento posterior
  • Cloud Storage: Escribe archivos procesados

Importante: Dataflow NO escribe a solvento-adv-analytics-prod. Dataflow solo procesa datos hacia solvento-data-prod (raw). Las transformaciones a solvento-adv-analytics-prod se realizan exclusivamente con dbt y Dataform.

Ingesta a ELK: Los jobs de invoices-webhook-prod e invoices-api-prod escriben las invoices a ELK para búsqueda y análisis en tiempo real, además de escribir a BigQuery.

Patrones de Uso

ETL Pipelines

Dataflow se utiliza para extraer, transformar y cargar datos entre diferentes sistemas.

Data Enrichment

Enriquecimiento de datos con información adicional de múltiples fuentes.

Aggregations

Agregaciones y cálculos sobre grandes volúmenes de datos.

Real-time Processing

Procesamiento de eventos en tiempo real desde Pub/Sub.

Ejemplos de Pipeline

Pipeline Batch Simple

import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions

def process_data(element):
    # Transformación de datos
    return element.upper()

options = PipelineOptions()
with beam.Pipeline(options=options) as p:
    (p
     | 'Read' >> beam.io.ReadFromText('gs://bucket/input/*.csv')
     | 'Transform' >> beam.Map(process_data)
     | 'Write' >> beam.io.WriteToText('gs://bucket/output/'))

Pipeline Streaming

import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions

options = PipelineOptions()
options.view_as(StandardOptions).streaming = True

with beam.Pipeline(options=options) as p:
    (p
     | 'Read' >> beam.io.ReadFromPubSub(topic='projects/solvento-data-prod/topics/my-topic')
     | 'Transform' >> beam.Map(process_event)
     | 'Write' >> beam.io.WriteToBigQuery(
         table='solvento-data-prod:dataset.table',  # IMPORTANTE: Solo escribe a data-prod
         write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND))

Scheduling

Documentar cómo se programan los pipelines:

  • Cloud Composer (Airflow): Orquestación de pipelines
  • Cloud Scheduler: Programación de jobs batch
  • Event-driven: Activación por eventos (Pub/Sub, Storage)

Monitoreo y Métricas

  • Job Status: Estado de ejecución de jobs
  • Throughput: Elementos procesados por segundo
  • Latency: Tiempo de procesamiento
  • Costos: Costos por hora de procesamiento
  • Errors: Errores y fallos en pipelines

Referencias