Batch vs Stream: quando cosa
Perché scegliere?
Ogni sistema di dati è bilanciato tra freschezza (latency), costo, complessità di supporto e affidabilità.
Batch - porzioni periodiche di dati ad alta larghezza di banda e basso costo per scrittura.
Stream: gestione continua degli eventi con un ritardo minimo e uno stato nella memoria/negli store locali.
Riassunto dei modelli
Batch
Origine: file/tabelle/snapshot.
Trigger: pianificazione (ora/giorno) o condizione (nuovo parquet-file).
Punti di forza: semplicità, determinismo, contesto completo di dati, grandi ricalcolati economici.
Deboli: niente «online», alta latitanza, «finestre» senza segnali in tempo reale.
Stream
Fonte: broker (Kafka/NATS/Pulsar), CDC, code.
Evento di trigger.
Forti: ritardo basso, reattività, integrazione naturale con il prodotto.
Deboli: complessità temporale (event vs processing), ordine/ripresa, stato, funzionamento.
Soluzione: matrice di selezione
Regola 80/20: se la SLA consente ritardi di minuti/ore e nessun jet five, prendi batch. Se la reazione «qui e ora» è critica, o se sono necessarie vetrine viventi - stream (spesso + batch notturno supplementare per la riconciliazione).
Script tipici
Batch - quando è meglio:- Rapporti giornalieri, bilanci periodi, formazione ML, grandi join, deduplicazione «insieme».
- Modello di medaglione (bronze/silver/gold) con profonde validazioni.
- Battistesti di massa e vetrine attraversate.
- Antifrode/monitoraggio, alert SRE, real-time bilanci/missioni, raccomandazioni «ora».
- Integrazione evento-come-fatto (EDC), aggiornamento delle viste materializzate (CQRS).
- Microservizi: notifiche, webhook, reazioni agli eventi aziendali.
- Il flusso genera vetrine operative e segnali; il batch notturno fa la ricomposizione, la raccolta e i conti storici a basso costo.
Architetture
Lambda (Stream + Batch)
Stream per incorporazione e online; Batch per completezza e correzione.
I vantaggi sono flessibilità e SLA. Contro - doppia logica, duplicazione del codice.
Kappa (все — Stream + Replay)
Un unico logo come fonte di verità; batch-riconteggio = replay.
I vantaggi sono una base in codice, una sola semantica. Contro - Più difficile da utilizzare, requisiti di conservazione.
Hybrid-Pragmatic
Flusso operativo + batch-jobs periodici per joine pesanti/ML/correzioni.
In pratica, è l'opzione più comune.
Ora, ordine, finestre (per Stream)
Basarsi su event time, non su processing time.
Controlla watermark e allowed _ lateness; supporto di retraction/upserts per eventi recenti.
Partigiate le chiavi degli apparecchi, pianificate le chiavi calde.
Affidabilità e semantica degli effetti
Batch
Transazioni database o sostituzione atomica di partiture/tabelle.
Idampotenza - Tramite deterministic computing e overwrite/insert-overwrite.
Stream
At-least-once + Idempotent Sinks (upsert/merge, versioni degli aggregati).
Transazione «letto-registrato-registrato» per EOS per effetto.
Tabelle di deduplicò event _ id "/" operation _ id ".
Archivi e formati
Batch
Data Lake (Parquet/Delta/Iceberg), OLAP (ClickHouse/BigQuery), archivio oggetti.
Tabelle ACID per replace atomic, time travel.
Stream
Loghi/argomenti in broker, state stores (RocksDB/embedded), KV/Redis, OLTP per proiezioni.
Registro schemi (Avro/JSON/Proto), modalità di compatibilità.
Costo e SLO
Batch: paghi con «pacchetti» - è vantaggioso con grandi quantità, ma ritardi nella pianificazione.
Stream: risorse RENT permanenti, valore di punta a QPS elevato; Ma la SLA è in secondi.
Conta il p95/p99 latency, la lega trasversale, il costo in u.e./evento e il supporto TCO.
Test
Generale: set golden, invarianti property-based, generazione di ingressi sporchi.
Batch: determinabilità, riavvii idipotenti, paragoni pre/post.
Stream: out-of-order/duplicati, fault-ingection tra effetto e fissazione offset, test replay.
Abbreviazioni
Batch: Durata del jobs, quota di fails/retrai, freschezza delle vetrine, scan-cost.
Stream: lega per tempo/messaggio, watermark, late-rate, dimensione state/frequenza checkpoint, puntata DLQ.
Dappertutto: «trace _ id», «event _ id», versioni di schemi/linee di montaggio.
Sicurezza e dati
PII/PCI: minimizza, cifra at-rest/in-flight, segna i campi nei circuiti ('x-pii').
Per Stream, protezione state/checkpoint, ACL su top.
GDPR/diritto all'oblio: Stream - crypto-cancellazione/redazione nelle proiezioni; Batch - ricalcolazione delle partenze.
Strategie di transizione
Batch → Stream: inizia con la pubblicazione degli eventi (Outbox/CDC), alza una piccola vetrina real-time senza toccare la raccolta esistente.
Stream → Batch - Aggiungi i file giornalieri per la segnalazione/riconciliazione e la riduzione del carico di lavoro per i sinks in streaming.
Anti-pattern
«Tutto in Stream» per la moda, costoso e difficile senza un bisogno reale.
«Un batch notturno gigante» con i requisiti <5 minuti.
Utilizzo del processing time per le metriche aziendali.
I CDC crudi come eventi pubblici sono la connettività dura, il dolore dell'evoluzione.
Non c'è idepotenza nei sinks per i doppi effetti sui restart.
Assegno foglio di selezione
- SLO di freschezza: quanti secondi/minuti/ore sono validi?
- Stabilità degli ingressi: ci sono out-of-order/duplicati?
- Sono necessarie reazioni in linea/vetrine?
- Costo 24/7 vs «finestra pianificata».
- Metodo di correzione: retract/upsert o riconteggio notturno.
- Comando e maturità operativa (on-call).
- Requisiti per «esattamente un effetto».
- Politica PII/retenza/diritto all'oblio.
Pattern arbitrali
Vetrina operativa (Hybrid):- Stream: EDC di proiezione (KV/Redis, OLTP) per UI, idimpotenti upsert.
- Batch: raccordo nightly in OLAP, ripartizione, file ML.
- Stream: finestre di sessione, regole CEP, alert <1-5 s
- Batch: riqualificazione dei modelli, validazione off-line.
- Stream: trigger, segmenti in tempo reale.
- Batch: schemi, modelli LTV, report.
FAQ
È possibile ottenere «quasi real-time» su batch?
Sì, microbiatchi/job trigger (ogni 1-5 minuti) è un compromesso, ma senza la complessità delle finestre/late-events.
C'è bisogno di un approccio Lambda ovunque?
No, no. Se il flusso chiude tutte le attività e si sa fare replay - Kappa è più semplice nel lungo. Altrimenti, un ibrido.
Come si conta il costo?
Riassumere compute + storage + ops. Per Stream, aggiungere il prezzo di inattività 24/7 e notti di emergenza; per Batch, il prezzo del «ritardo» dei dati.
Totale
Scegliete Batch quando il costo, la semplicità e la regolazione sono importanti; Stream - quando la reattività e la freschezza sono critiche. In pratica vince l'ibrido, il flusso è per la rete e i segnali, il battello per la completezza e i ricalcoli storici a basso costo. L'importante è impostare lo SLO, garantire idempotenza/osservabilità e predisporre il percorso di correzione.