Modül 9 · Akış İşleme (Stream) · ⏱ 5 dk

Streaming vs batch: musluk vs kova

Streaming vs batch

Bu derste neler öğreneceksin

  • Latency throughput kavramlarını açıklar
  • Gerçek zamanlı ne zaman gerekli açıklar
  • Stream + batch hibrit mimari tasarlar

Musluk mu, Kova mı?

Elif’in limonatasında iki çeşit su ihtiyacı var. Bazen kova ile su taşırsın: gidip kuyuya bir kova indirirsin, yukarı çıkarırsın, bahçeye dökersin. Bazen de musluk açarsın: su her an akar, bardak dolduğu anda içersin.

Veri mühendisliğinde de iki yol var:

  • Batch (kova): Veriyi biriktirirsin, belirli bir zamanda (gece yarısı gibi) toplu olarak işlersin. Patronun sabah raporu = kova yöntemi.
  • Streaming (musluk): Veri her an gelir, sen de her an işlersin. Müşteri sipariş verdiği anda ekrana düşmesi = musluk yöntemi.

Hangisi daha iyi? Hiçbiri! Duruma göre değişir. Bugünkü ders: hangisini ne zaman kullanacağını öğrenmek.

Latency: “Ne Kadar Geç?”

Latency, bir olayın gerçekleşmesiyle sistemin ona cevap vermesi arasındaki süredir. Düşük latency = hızlı cevap.

  • Batch rapor: latency 12 saat (gece yarısı topla, sabah 8’de rapor).
  • Streaming musluk: latency 200 milisaniye (sipariş geldi, anında ekrana düştü).

Gecikme olayını şöyle düşün: Elif müşteriye “siparişinizi aldık” mesajı gönderecek. Mesaj batch ile gelirse müşteri 5 saat sonra görür — belki çoktan susamışlığı geçmiştir. Streaming ile gelirse müşteri bardak elindeyken okur.

Throughput: “Bir Anda Ne Kadar?”

Throughput, birim zamanda işlenen veri miktarıdır. Yüksek throughput = çok veri.

  • Batch: bir gecede 10 milyon satır işleyebilir (gece boyunca boş makine).
  • Streaming: saniyede 1000 satır işler (sürekli aynı hız).

Musluğun saniyede 1 bardak su verir, ama günde 86.400 bardak eder. Kova ise günde 1 seferde 50 bardak taşır. Sürekli akan musluk throughput olarak kovayı geçebilir, ama tek seferde kova daha fazla taşır.

Hangi Durumda Hangisi?

DurumYöntemNeden?
”Dünkü satış toplamı” raporuBatchSaatlik doğruluk yeterli, gece işlenir.
”Şu an sepette kaç ürün var”StreamingSayı her an değişiyor.
”Dolandırıcılık tespiti”Streaming5 dakika geç kalırsan zarar büyür.
”Aylık müşteri segmenti”BatchAylık özet, gece işlenir.
”Canlı skor / sohbet”StreamingHer saniye yenileme gerekir.

Genel kural: anlık karar gerekiyorsa streaming, dönemsel rapor gerekiyorsa batch.

Hibrit Mimari: İkisi Bir Arada

Gerçek projelerde çoğu zaman ikisini birlikte kullanırsın. Elif’in limonatası için hibrit plan:

Müşteri sipariş veriyor


   [Kafka / Redpanda]   ← olay günlüğü (akış)

        ├─────────────────────────┐
        ▼                         ▼
   [Streaming iş]           [Gecelik batch]
   Anında bildirim           Gece toplu rapor
   "Siparişiniz alındı"     "Bu ay en çok ne satıldı"

Akış tarafı musluğu açar: her sipariş anında işlenir, müşteriye bildirim gider. Batch tarafı geceleyin kovayı doldurur: tüm günün verisinden özet çıkarır, patronun raporu hazırlanır.

Basit Bir Akış İşi (Pseudo-code)

Streaming’in ne olduğunu hissetmek için Python’da basit bir örnek:

import time

# Musluktan akan olayları simüle et
def musluk_ac():
    olaylar = ["sipariş: limonata", "tıklama: menü", "ödeme: 25 TL"]
    while True:
        for olay in olaylar:
            yield olay                       # her seferinde bir olay ver
            time.sleep(0.5)                  # yarım saniye bekle

# Akan olayları işle
for olay in musluk_ac():
    print(f"[anında] {olay}")                # anında işle

Çıktı:

[anında] sipariş: limonata
[anında] tıklama: menü
[anında] ödeme: 25 TL
[anında] sipariş: limonata
...

Burada önemli olan: döngü bitmiyor. Veri aktıkça işlemeye devam ediyor. Batch’te for döngüsünün sonu vardı (günde bir kapanırdı), streaming’de while True musluğu sürekli açık tutar.

Özet

Bugün öğrendik:

  • Batch = kova: biriktir, zamanı gelince toplu işle (gece raporu).
  • Streaming = musluk: veri her an gelir, sen de her an işlersin (anlık bildirim).
  • Latency: olay-cevap arasındaki süre. Streaming’de düşük (ms), batch’te yüksek (saat).
  • Throughput: birim zamanda işlenen miktar. Batch tek seferde yüksek olabilir.
  • Hibrit: çoğu gerçek projede ikisi yan yana çalışır (akış + gecelik batch).

Küçük Ödev

  1. Yukarıdaki musluk_ac() örneğini çalıştır. Çıktıdaki her satır arasında kaç saniye var?
  2. time.sleep(2) yapsan latency nasıl değişir? Bir cümle yaz.
  3. Bir senaryo düşün: okul kantini için “streaming mi batch mi?” kararı ver, nedenini yaz.

Sıradaki

Musluğu açtık, peki akan veriyi nerede tutacağız? Kafka / Redpanda olay günlüğü geliyor →