Brains4Cloud
ESEN
Practicar

Tema 7 de 11

D2 · Planificar e implementar una solución en la nube

BigQuery, Pub/Sub, Dataflow y Kafka

La otra mitad de los productos de datos del temario: el almacén analítico (BigQuery), la mensajería (Pub/Sub y Google Cloud Managed Service for Apache Kafka) y el procesamiento de flujos (Dataflow). El temario también pide saber cargar datos, incluida la carga desde Cloud Storage, y mantener la redundancia multirregional.

Plataforma de datos totalmente gestionada y serverless para gestionar y analizar datos con SQL y Python, sin infraestructura. Consulta terabytes en segundos y petabytes en minutos.

  • Almacenamiento y cómputo separados: cada capa escala sin afectar a la otra, gracias a la red de Google.
  • Almacenamiento columnar optimizado para consultas analíticas, con semántica de transacciones ACID.
  • Los datasets son el contenedor de nivel superior de tablas y vistas.
  • Consulta datos externos sin cargarlos: tablas externas y consultas federadas sobre Cloud Storage, Bigtable, Spanner o Google Sheets.
  • SQL estándar ANSI, BigQuery ML para modelos con SQL, BigQuery DataFrames (Python), notebooks en BigQuery Studio y conexión con Looker, Data Studio, Sheets, Tableau o Power BI.
  • Interfaces: consola, la herramienta de línea de comandos bq, bibliotecas de cliente, API REST y RPC, y controladores ODBC y JDBC.

Ubicaciones y disponibilidad de BigQuery

Región

Un lugar concreto, como Londres (europe-west2).

Multirregión

Un área grande, como Estados Unidos (US) o Europa (EU). Puede dar cuotas mayores.

Una multirregión no es redundancia entre regiones

En cualquier tipo de ubicación, BigQuery guarda copias de los datos en dos zonas de una sola región. Una multirregión no añade redundancia regional: los datos se guardan en una región y el cómputo solo se da en ella. Para redundancia entre regiones, BigQuery ofrece recuperación ante desastres gestionada.

La ubicación se elige al crear el dataset y determina dónde se almacenan y procesan los datos, así como el precio.

Cargar datos en BigQuery

MétodoCuándo
Carga por lotesGrandes volúmenes desde archivos locales o Cloud Storage: Avro, Parquet, ORC, CSV, JSON, exportaciones de Datastore y Firestore. Para cargas programadas o incrementales, Google recomienda BigQuery Data Transfer Service
StreamingDatos casi en tiempo real: una suscripción de BigQuery en Pub/Sub o la Storage Write API
Change Data CaptureDatastream replica los cambios de filas de una base de datos a BigQuery
FederaciónConsultar datos externos sin cargarlos
# Cargar un CSV desde Cloud Storage con un esquema
bq load --source_format=CSV mydataset.mytable gs://mybucket/mydata.csv ./myschema.json

# Comodines en el URI de Cloud Storage
bq load --source_format=CSV --autodetect mydataset.mytable "gs://mybucket/fed-*/temp/*.csv"

La detección automática de esquema no detecta encabezados si todas las columnas son de tipo string. La carga de un archivo local también se hace con bq load.

Modelos de precio de BigQuery

Bajo demanda (por TiB)

  • Se paga por los datos procesados por cada consulta.
  • El primer TiB procesado al mes es gratis.
  • Acceso general a hasta 2000 slots simultáneos compartidos por las consultas del proyecto.

Por capacidad (por slot-hora)

  • Se usa con reservas de BigQuery.
  • Pago por uso con autoescalado y compromisos opcionales de uno o tres años con descuento.

El almacenamiento se cobra aparte: los primeros 10 GiB al mes son gratis, y las tablas o particiones que no se modifican durante 90 días consecutivos pasan a almacenamiento a largo plazo, más barato. La estimación de costes se ve en el dominio D3.

Servicio de mensajería asíncrono y escalable que desacopla los servicios que producen mensajes de los que los procesan, con latencias típicas de unos 100 milisegundos. Los publicadores envían mensajes a un tema y los suscriptores los reciben a través de suscripciones.

Ingesta de eventos

Eventos de apps o servidores que Dataflow lleva a BigQuery, Bigtable o Cloud Storage.

Distribución en tiempo real

Bus de eventos empresarial que comparten varios equipos.

Replicación entre bases de datos

Distribuir eventos de cambio de una base de datos.

Procesamiento paralelo

Repartir tareas entre muchos workers, por ejemplo redimensionar imágenes.

  • Combina la escalabilidad horizontal de Kafka con funciones de middleware como colas de mensajes fallidos (dead letter) y filtrado.
  • Paralelismo por mensaje, no por partición: el número de clientes concurrentes no está limitado por las particiones.
  • Está pensado para comunicación entre servicios, no con clientes finales móviles o IoT.

Tipos de suscripción y entrega

TipoCómo funciona
PullEl cliente suscriptor pide los mensajes al servidor
PushPub/Sub envía cada mensaje a un endpoint HTTP del suscriptor (por ejemplo, Cloud Run)
ExportaciónEscribe los mensajes directamente en BigQuery, Cloud Storage o Bigtable (esta última en vista previa)
  • Una suscripción pertenece a un solo tema; un tema puede tener varias. Solo recibe los mensajes publicados después de crearla.
  • El suscriptor debe confirmar (ack) cada mensaje antes del ackDeadline; si no, se vuelve a entregar.
  • Por defecto: entrega al menos una vez y sin orden. Se puede activar el orden por clave de ordenación y la entrega exactamente una vez. El suscriptor debe ser idempotente.
  • Las suscripciones caducan tras 31 días sin actividad, salvo que cambies la política de caducidad.
  • La retención del tema permite volver atrás y reproducir mensajes ya publicados.
gcloud pubsub topics create orders
gcloud pubsub subscriptions create orders-sub --topic=orders
gcloud pubsub topics publish orders --message="hello"
gcloud pubsub subscriptions pull orders-sub --auto-ack

Procesamiento de datos por lotes y en streaming con el mismo modelo de programación. Las pipelines leen de uno o varios orígenes, transforman los datos y los escriben en un destino.

  • Totalmente gestionado: asigna un grupo de VM workers para cada trabajo y las borra al terminar. Escala y reequilibra el trabajo automáticamente.
  • Basado en Apache Beam (SDK de Java, Python y Go): la misma pipeline puede correr en Flink o Spark sin reescribirla.
  • Por defecto, procesamiento exactamente una vez; en streaming se puede usar el modo al menos una vez para reducir coste y latencia.
  • Formas de crear pipelines: código con los SDK de Beam, plantillas (incluidas las de Google, sin programar) y notebooks de JupyterLab.
  • Casos: mover datos, ETL hacia BigQuery, backends de paneles de BI, ML en tiempo real, procesar logs y sensores.
  • La interfaz de monitorización de la consola muestra el grafo de la pipeline y el progreso de cada fase (el estado de los trabajos se revisa en el dominio D3).

Managed Service for Apache Kafka

Servicio de Google Cloud para ejecutar clústeres de Apache Kafka de código abierto, seguros y escalables.

Dimensionado

Indicas vCPU y memoria totales; el servicio aprovisiona los brokers y reequilibra las particiones al escalar.

Almacenamiento por niveles

Disco local rápido limitado más almacenamiento remoto prácticamente ilimitado y barato. Tú fijas la retención de cada tema.

Red

Accesible desde varias VPC, proyectos y regiones mediante Private Service Connect, con una única URL de bootstrap.

Seguridad

Autenticación SASL (con identidades IAM) o mTLS, TLS obligatorio, cifrado en reposo con claves de Google o CMEK, parches automáticos.

No admite conexiones sin autenticar ni sin cifrar. La autorización combina IAM (gestión del clúster) y ACL de Kafka.

Pub/Sub o Kafka

Pub/SubManaged Service for Apache Kafka
ModeloServerless, sin clúster que dimensionarClúster de Kafka que dimensionas por vCPU y memoria
ParalelismoPor mensajePor partición
CuándoIntegración nativa con Google Cloud, eventos y streaming sin gestionar infraestructuraAplicaciones y herramientas que ya usan la API de Kafka

Escenarios de examen

SituaciónRespuestaPor qué
Analizar petabytes con SQL sin gestionar servidoresBigQueryAlmacén de datos serverless.
Cargar cada noche archivos CSV de un bucket en BigQuery de forma programadaBigQuery Data Transfer ServicePrograma trabajos de carga recurrentes.
Meter en BigQuery en tiempo casi real los eventos de un temaSuscripción de BigQuery en Pub/SubExporta los mensajes directamente a una tabla.
Replicar cambios de una base de datos MySQL a BigQueryDatastream (CDC)Replica cambios a nivel de fila.
Desacoplar un servicio que produce pedidos del que los procesaPub/SubMensajería asíncrona.
Transformar y enriquecer un flujo de eventos antes de guardarlo en BigQueryDataflowProcesamiento por lotes y en streaming con Apache Beam.
Migrar aplicaciones que ya usan clientes de Apache KafkaManaged Service for Apache KafkaKafka gestionado y compatible.
Costes de consulta previsibles en BigQuery para un equipo grandePrecio por capacidad (reservas de slots)Se paga por slot-hora, con compromisos opcionales.

Trampas frecuentes del examen

❓ ¿Un dataset en la multirregión US está protegido si cae una región?

No. Los datos se guardan en dos zonas de una sola región. Para redundancia entre regiones hay que usar la recuperación ante desastres gestionada.

❓ ¿Una suscripción nueva recibe los mensajes publicados antes de crearla?

No. Solo los posteriores, salvo que uses la retención del tema y la reproducción de mensajes.

❓ ¿Pub/Sub garantiza por defecto el orden y la entrega única?

No. Por defecto es al menos una vez y sin orden; ambas cosas se pueden activar.

❓ ¿Hay que gestionar VM para ejecutar Dataflow?

No. Dataflow asigna los workers y los borra al terminar el trabajo.

❓ ¿Qué SDK usa Dataflow?

Apache Beam, en Java, Python o Go.

❓ ¿Cuándo pasa una tabla de BigQuery a almacenamiento a largo plazo?

Cuando no se modifica durante 90 días consecutivos.

¿Entendiste este tema?

Pon a prueba lo que acabas de aprender

Una app publica millones de eventos de clics por hora. Hay que limpiarlos, enriquecerlos con datos de usuario y guardarlos en BigQuery en tiempo casi real, sin gestionar servidores. ¿Qué arquitectura elige?

¿Listo para poner a prueba "BigQuery, Pub/Sub, Dataflow y Kafka"?

Preguntas originales, cada una con su explicación.

Empezar un simulacro