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:
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