În ingineria datelor, alegerea dintre procesarea batch și cea streaming nu este doar o decizie tehnică, ci una strategică care influențează arhitectura, costurile și valoarea afacerii. Batch-ul este ideal pentru rapoarte istorice și analize complexe unde latența nu este critică, în timp ce streaming oferă insights în timp real, esențiale pentru detecția fraudelor sau monitorizarea sistemelor. În practică, majoritatea companiilor adoptă o arhitectură hibridă (Lambda sau Kappa) pentru a beneficia de ambele lumi, asigurând astfel că datele sunt disponibile atât pentru decizii instantanee, cât și pentru audituri detaliate.
Concepte cheie
- Procesare Batch: Agregarea și prelucrarea volumelor mari de date acumulate într-un interval de timp, executate periodic (zilnic/orar).
- Procesare Streaming: Prelucrarea continuă a fluxurilor de date la sursă, oferind rezultate cu latență foarte mică (milisecunde/secunde).
- Latență vs. Prințabilitate: Batch-ul oferă o prințabilitate mai mare per unitate de calcul, în timp ce streaming-ul necesită infrastructură mai complexă pentru a menține latența scăzută.
- Consistența datelor: Batch-ul permite corectarea erorilor înainte de încărcare (idempotență), iar streaming-ul poate necesita mecanisme avansate de gestionare a ordinii evenimentelor.
- Arhitectura Lambda: Combinație între un strat batch pentru acuratețe și un strat speed-layer pentru viteză, menținând două surse ale adevărului.
- Arhitectura Kappa: Abordare simplistă care tratează toate datele ca un stream, utilizând replay capability pentru recalcularea istoricului.
- Exactly-once semantics: Garantarea că un eveniment este procesat exact o singură dată, evitând duplicarea sau pierderea datelor în sistemele distribuite.
Exemplu practic
Imaginați-vă o platformă de e-commerce care trebuie să calculeze veniturile zilnice (batch) și să afișeze notificări de stoc epuizat instantaneu (streaming).
# Simulare procesare Batch (Python/Pandas)
import pandas as pd
# Încărcăm datele din ziua precedentă
df = pd.read_csv('sales_yesterday.csv')
daily_revenue = df['amount'].sum()
print(f"Venit total ieri: {daily_revenue}")
# Simulare procesare Streaming (Conceptual - Kafka Consumer)
def on_order_received(order):
if order['stock'] < 1:
send_alert(order['product_id']) # Notificare instant
În acest scenariu, batch-ul rulează noaptea pentru rapoartele financiare, iar streaming-ul ascultă topicul orders pentru a reacționa imediat la evenimente critice.
Greșeli frecvente
- Utilizarea streaming-ului peste tot: Complexitatea și costul operațional sunt mult mai mari decât necesarul real pentru multe cazuri de uz.
- Ignorarea ordinii evenimentelor: În streaming, mesajele pot ajunge dezordonat; neconsiderarea acestui aspect duce la calcule incorecte.
- Lipsa idempotenței: Dacă un sistem reîncepe după o eroare, datele pot fi duplicate, afectând rapoartele financiare.
- Supraingineria arhitecturii: Implementarea unui cluster Kafka pentru un simplu dashboard care se actualizează o dată pe oră este o risipă de resurse.
Întrebări de interviu
1. Când alegeți Batch în detrimentul Streaming-ului? Când analiza necesită agregarea unor date istorice vaste, când latența de câteva ore este acceptabilă și când doriți o consistență puternică a datelor fără complexitatea gestionării stării în timp real.
2. Ce este problema "out-of-order events" în streaming? Evenimentele pot ajunge la consumator în ordine diferită față de momentul generării lor (datorită rețelei sau paralelismului), ceea ce poate distorsiona agregările temporale dacă nu este gestionat prin windowing sau buffering.
3. Care este avantajul principal al arhitecturii Kappa față de Lambda? Simplificarea operațională, deoarece menține un singur strat de procesare (streaming) pentru atât datele noi, cât și recalcularea istoricului, eliminând necesitatea sincronizării dintre două surse ale adevărului.
Exercițiu
Pentru următoarele 45 de minute, proiectează o arhitectură simplă pentru o aplicație de tracking de livrări. Specifică:
- Ce date ar trebui procesate în streaming (ex: locație GPS) și ce în batch (ex: raport de eficiență șofer).
- Desenează un diagramă simplă (text-based) a fluxului de date.
- Justifică alegerea ta bazată pe cerințele de latență și cost.