Batch vs Stream: cuando qué
¿Por qué elegir?
Cualquier sistema de datos equilibra entre la frescura (latency), el coste, la complejidad del soporte y la fiabilidad.
Batch - «porciones» periódicas de datos con alto ancho de banda y bajo costo por escritura.
Stream: procesamiento continuo de eventos con latencia y estado mínimos en la memoria/stores locales.
Resumen de los modelos
Batch
Fuente: archivos/tablas/snapshots.
Desencadenador: horario (hora/día) o condición (nuevo archivo parquet).
Fortalezas: simplicidad, determinismo, contexto completo de datos, grandes recomposiciones baratas.
Débiles: no hay «online», alta latencia, «ventanas» sin señales en tiempo real.
Stream
Fuente: corredores (Kafka/NATS/Pulsar), CDC, colas.
Desencadenador: evento.
Fuerte: baja latencia, reactividad, integración natural con el producto.
Débil: dificultad de tiempo (proceso de eventos vs), orden/toma, estado, explotación.
Solución: matriz de selección
Regla 80/20: si el SLA permite retardos de minutos/horas y no hay chorros reactivos - tome el batch. Si la reacción «aquí y ahora» es crítica o se necesitan vitrinas en vivo - stream (a menudo + batch nocturno adicional para la reconciliación).
Scripts de tipo
Batch - Cuando mejor:- Informes diarios, facturación por períodos, formación ML, grandes joins, deduplicación «con todo el conjunto».
- Medallón-modelo (bronce/plata/oro) con validaciones profundas.
- Basktests masivos y muestreo de escaparates.
- Antifraude/monitoreo, alertas SRE, balance/misión en tiempo real, recomendaciones «ahora».
- Integraciones de evento como hecho (EDC), actualización de vistas materializadas (CQRS).
- Microservicios: notificaciones, webhooks, reacciones a eventos empresariales.
- El flujo forma los escaparates operativos y las señales; el batch nocturno hace la reconciliación, la bóveda y los recuentos históricos baratos.
Arquitecturas
Lambda (Stream + Batch)
Stream para el aumento y en línea; Batch para la plenitud y correcciones.
Ventajas: flexibilidad y SLA. Contras: doble lógica, duplicación de código.
Kappa (все — Stream + Replay)
Un solo registro como fuente de la verdad; recalculaciones de batch = replay.
Ventajas: una base de código, una semántica única. Contras: operación más difícil, requisitos de almacenamiento de registros.
Hybrid-Pragmatic
Streaming «operation» + batch-jobs periódicos para joins/ML/correcciones pesadas.
En la práctica, es la opción más común.
Tiempo, orden, ventanas (para Stream)
Apoyarse en el tiempo de evento, no en el tiempo de procesamiento.
Controle watermark y 'allowed _ lateness'; admitir retractions/upserts para eventos posteriores.
Lote las llaves de las unidades, planifique las «teclas de acceso rápido».
Fiabilidad y efectos semánticos
Batch
Transacciones de DB o sustitución atómica de lotes/tablas.
Idempotencia - a través de la computación determinista y overwrite/insert-overwrite.
Stream
At-least-once + sinks idempotentes (upsert/merge, versiones de agregados).
Transaccional «leyó-registró-fijó la posición» para EOS por efecto.
Tablas de dedo por 'event _ id '/' operation _ id'.
Almacenamiento y formatos
Batch
Data Lake (Parquet/Delta/Iceberg), OLAP (ClickHouse/BigQuery), almacenamiento de objetos.
Tablas ACID para replace atómico, tiempo de viaje.
Stream
Logs/temas en corredores, state stores (RocksDB/embedded), KV/Redis, OLTP para proyecciones.
Registro de esquemas (Avro/JSON/Proto), modos de compatibilidad.
Costo y SLO
Batch: paga con «packs» - rentable con grandes volúmenes, pero retrasando ≥ horarios.
Stream: recursos de Rantim permanentes, costo máximo con un alto QPS; Pero SLA en segundos.
Considere p95/p99 latency, track-track, costo en u.a./evento y soporte TCO.
Pruebas
General: conjuntos de oro, invariantes property-based, generación de entradas sucias.
Batch: determinismo, reinicios idempotentes, comparación de bóvedas «antes/después».
Stream: out-of-order/duplicados, fault-injection entre efecto y fijación offset, replay-tests.
Observabiliti
Batch: duración del job, fracción de feil/retrae, frescura de las vitrinas, escaneo-costo.
Stream: valor por tiempo/mensaje, watermark, late-rate, tamaño state/frecuencia checkpoint, apuesta DLQ.
En todas partes: 'trace _ id', 'event _ id', versiones de circuitos/transportadores.
Seguridad y datos
PII/PCI - Minimizar, cifrar en/in-flight, etiquetar campos en circuitos ('x-pii').
Para Stream - protección de state/checkpoint's, ACL en topics.
GDPR/derecho al olvido: en Stream - cripto-borrado/edición en proyecciones; en Batch, un nuevo cálculo de los partidos.
Estrategias de transición
Batch → Stream: comienza publicando eventos (Outbox/CDC), levanta un pequeño escaparate en tiempo real sin tocar la bóveda existente.
Stream → Batch: agregue bóvedas diarias para reportar/conciliar y reducir la carga de flujo de sinks.
Anti-patterny
«Todo está en Stream» por el bien de la moda: caro y difícil sin necesidad real.
«Un batch nocturno gigante» con requisitos <5 minutos.
Uso del tiempo de procesamiento para las métricas de negocio.
Los CDC crudos como eventos públicos: conectividad rígida, dolor en la evolución.
No hay idempotencia en los sinks → efectos dobles en los restarts.
Lista de verificación de selección
- SLO frescura: ¿cuántos segundos/minutos/horas es permitido?
- Estabilidad de las entradas: ¿Hay fuera de orden/duplicados?
- ¿Se necesitan reacciones/vitrinas en línea?
- Costo: rantime 24/7 vs «ventana en horario».
- Método de corrección: retract/upsert o recuento nocturno.
- Equipo y madurez operativa (observabilidad, on-call).
- Requisitos para «exactamente un efecto».
- Políticas PII/retenciones/derecho al olvido.
Referens-patterny
Escaparate operativo (Hybrid):- Stream: EDC → proyección (KV/Redis, OLTP) para UI, idempotent upsert.
- Batch: bóveda nightly en OLAP, reconciliation, ML-fichi.
- Stream: ventana de sesión, reglas CEP, alertas <1-5 s.
- Batch: readiestramiento de modelos, validación offline.
- Stream: disparadores, segmentos en tiempo real.
- Batch: puntuaciones, modelos LTV, informes.
FAQ
¿Es posible obtener un «tiempo casi real» en el batch?
Sí: los microbatches/jobs desencadenantes (cada 1-5 minutos) son un compromiso, pero sin las complejidades de las ventanas/late-events.
¿Es necesario un enfoque Lambda en todas partes?
No. Si el flujo cierra todas las tareas y sabes cómo hacer replay - Kappa es más fácil de largo. De lo contrario, un híbrido.
¿Cómo puedo contar el costo?
Resume compute + storage + ops. Para Stream, agregue el precio de inactividad «24/7» y noches de emergencia; para Batch, el precio de los datos «atrasados».
Resultado
Elija Batch cuando el bajo costo, la simplicidad y las bóvedas periódicas son importantes; Stream - cuando la reactividad y la frescura son críticas. En la práctica, gana el híbrido: el flujo - para señales y en línea, el batch - por la plenitud y los cálculos históricos baratos. Lo principal es establecer el SLO, proporcionar idempotencia/observabilidad y diseñar de antemano la ruta de corrección.