Lot vs Stream: când ce
De ce să alegeți deloc
Orice sistem de date echilibrează între latență, cost, complexitate suport, și fiabilitate.
Lot - periodic „bucăți” de date cu lățime de bandă mare și cost scăzut pe înregistrare.
Stream - procesarea continuă a evenimentelor cu întârziere minimă și stare în memorie/sectoare locale.
Pe scurt despre modele
Lot
Sursă: fișiere/tabele/instantanee.
Declanșator: program (oră/zi) sau stare (nou fișier de parchet).
Puncte forte: Simplitate, determinism, context complet de date, recalculări mari ieftine.
Slab: fără „online”, latență ridicată, „ferestre” fără semnale în timp real.
Stream
Sursa: brokeri (Kafka/NATS/Pulsar), CDC, cozi
Trigger: eveniment.
Puternic: latență scăzută, reactivitate, integrare naturală cu produsul.
Slabă: complexitatea timpului (procesare eveniment vs), ordine/duplicate, stare, funcționare.
Soluţie: matrice de selecţie
Regula 80/20: dacă SLA permite întârzieri minut/oră și nu există caracteristici reactive - ia lot. Dacă reacția este critică „aici și acum” sau aveți nevoie de vitrine live - flux (adesea + lot suplimentar de noapte pentru reconciliere).
Scenarii tipice
Lot - când este mai bine:- Raportarea zilnică, facturarea perioadelor, instruirea ML, îmbinările mari, eliminarea duplicatelor „cu întregul set”.
- Model medalion (bronz/argint/aur) cu validări profunde.
- Mass backtests și magazin fereastră reasamblare.
- Anti-fraudă/monitorizare, alerte SRE, bilanț/misiuni în timp real, recomandări „acum”.
- Event-as-fapt (EDC) integrări, Vizualizări materializate Update (CQRS).
- Microservicii: notificări, webhookuri, reacții la evenimente de afaceri.
- Fluxul generează afișaje și semnale operaționale; lot de noapte face reconciliere, seif și renumărări istorice ieftine.
Arhitectură
Lambda (Stream + Lot)
Stream pentru increment și online; Lot pentru completitudine și corecții.
Pro: Flexibilitate și SLA. Contra: dublă logică, duplicare cod.
Kappa (все - Stream + Replay)
Un singur jurnal ca sursă a adevărului; lot-recalculări = reluare.
Pro: o bază de cod, semantică unică. Contra: mai dificil de operat, cerințe de stocare jurnal.
Hibrid-Pragmatic
Streaming „sistem de operare” + periodic locuri de muncă lot pentru îmbinări grele/ML/corecții.
În practică, este cea mai comună opțiune.
Timp, ordine, ferestre (pentru Stream)
Bazați-vă pe timpul evenimentului, nu timpul de procesare.
Gestionați filigranul și 'allowed _ lateness'; suporta retractii/upserts pentru evenimente ulterioare.
Partiție după chei de unitate, planul „taste fierbinți”.
Fiabilitatea și semantica efectelor
Lot
Tranzacții cu baze de date sau înlocuirea atomică a loturilor/tabelelor.
Idempotency - prin calcul determinist și suprascriere/inserare-suprascriere.
Stream
Cel puțin o dată + chiuvete idempotente (upsert/îmbinare, versiuni de agregate).
Tranzactional „read-write-fix poziție” pentru EOS prin efect.
Tabele de eliminare a duplicatelor prin 'event _ id'/' operation _ id'.
Bolți și formate
Lot
Data Lake (Parchet/Delta/Iceberg), OLAP (ClickHouse/BigQuery), stocarea obiectelor.
Tabele ACID pentru înlocuirea atomică, călătoria în timp.
Stream
Jurnale/subiecte în brokeri, magazine de stat (RocksDB/embedded), KV/Redis, OLTP pentru proiecții.
Registrul schemei (Avro/JSON/Proto), moduri de compatibilitate.
Cost și SLO
Lot: plătiți în loturi - este profitabil cu volume mari, dar întârzierea ≥ programul.
Stream: resurse de rulare constantă, costul de vârf la QPS ridicat; Dar SLA în câteva secunde.
Count p95/p99 latency, pass-through lag, cost in cu/event and support TCO.
Testare
Frecvente: seturi de aur, invarianți pe bază de proprietate, generarea de intrări murdare.
Lot: determinacy, reporniri idempotente, înainte/după compararea bolților.
Stream: out-of-order/duplicate, fault-injectare între efect și fixare offset, teste de reluare.
Observabilitate
Lot: durata postului, cota de eșecuri/retrageri, prospețimea ferestrelor magazinelor, costul scanării.
Stream: timp/mesaj lag, filigran, rata târzie, dimensiunea de stat/frecvență punct de control, rata DLQ.
Peste tot: 'trace _ id',' event _ id', versiuni de scheme/conducte.
Securitate și date
PII/PCI - minimizați, criptați la repaus/în zbor, marcați câmpurile în circuite („x-pii”).
Pentru Stream - protecția punctelor de stat/de control, ACL-uri pentru subiecte.
GDPR/dreptul de a fi uitat: în Stream - ștergerea/editarea cripto în proiecții; în lot - recalcularea loturilor.
Strategii de tranziție
Lot → Stream: începeți prin publicarea evenimentelor (Outbox/CDC), ridicați o mică vitrină în timp real fără a atinge seiful existent.
Stream → Lot - Adăugați seifuri zilnice pentru raportare/reconciliere și reducerea sarcinii pe chiuvetele de streaming.
Anti-modele
„All in Stream” de dragul modei: scump și dificil fără nevoie reală.
„Un lot de noapte gigant” cu cerințe <5 minute.
Utilizați timpul de procesare pentru măsurătorile de afaceri.
CDC-uri brute ca evenimente publice: conectivitate strânsă, durere în evoluție.
Nu există idempotență în chiuvete → efecte duble asupra repornirilor.
Lista de verificare a selecției
- Prospețime SLO: Câte secunde/minute/ore este acceptabil?
- Stabilitate intrare: Există out-of-orders/duplicate?
- Am nevoie de reacții/vitrine online?
- Cost: durata 24/7 vs „fereastră programată”.
- Metoda de corecție este retractarea/upsert sau recalcularea nocturnă.
- Echipa și maturitatea operațională (observabilitate, de gardă).
- Cerințe pentru „exact un efect”.
- Politici PII/retenții/dreptul de a fi uitat.
Modele de referință
Vitrină operațională (hibrid):- Stream: EDC → proiecții (KV/Redis, OLTP) pentru UI, upsert idempotent.
- Lot: seif de noapte în OLAP, reconciliere, caracteristici ML.
- Stream: ferestre de sesiune, reguli CEP, alerte <1-5 s.
- Lot: modele de recalificare, validare offline.
- Stream: declanșatoare, segmente în timp real.
- Lot: scoring, modele LTV, rapoarte.
ÎNTREBĂRI FRECVENTE
Este posibil să obțineți „aproape în timp real” pe lot?
Da: microbatches/trigger jabs (la fiecare 1-5 minute) - un compromis, dar fără complexitatea ferestrelor/evenimente târzii.
Abordarea Lambda are nevoie peste tot?
Nu, nu este. Dacă firul închide toate sarcinile și știi cum să faci reluarea - Kappa este mai ușor de lung. În caz contrar - un hibrid.
Cum de a conta costul?
Suma calcul + stocare + ops. Pentru Stream, adăugați prețul „24/7” și nopțile de urgență; pentru lot - prețul datelor „restante”.
Rezultat
Alegeți Lot atunci când sunt importante costurile reduse, simplitatea și bolțile de perioadă; Stream - atunci când reactivitatea și prospețimea sunt critice. În practică, hibridul câștigă: fluxul - pentru online și semnale, lotul - pentru integralitate și recalculări istorice ieftine. Principalul lucru este să setați SLO, să asigurați idempotența/observabilitatea și să proiectați calea de corecție în avans.