Streaming vs Batch Processing
Dua paradigma utama dalam memproses data. Pilihan antara keduanya tergantung pada seberapa cepat data harus tersedia setelah terjadi.
Batch Processing
Data diproses dalam kelompok besar secara berkala (per jam, per hari). Mayoritas data pipeline menggunakan pendekatan ini.
# Batch: proses semua order kemarin
# Dijalankan oleh scheduler (Airflow) setiap jam 2 pagi
def daily_revenue_batch():
yesterday = date.today() - timedelta(days=1)
# Extract: ambil semua order kemarin
orders = db.query("""
SELECT * FROM orders
WHERE DATE(created_at) = %s
""", [yesterday])
# Transform & Load
revenue = calculate_revenue(orders)
db.insert("daily_revenue", revenue)
# Kelebihan batch:
# ✓ Sederhana, mudah di-debug
# ✓ Efisien untuk data volume besar
# ✓ Retry mudah (proses ulang satu batch)
# ✓ Cost-effective
Stream Processing
Data diproses segera setelah terjadi (real-time atau near real-time). Latency dalam hitungan detik atau milidetik.
# Stream: proses setiap order saat terjadi
from kafka import KafkaConsumer
import json
consumer = KafkaConsumer(
"order-events",
bootstrap_servers=["kafka:9092"],
value_deserializer=lambda m: json.loads(m)
)
for message in consumer:
order = message.value
# Proses segera
update_realtime_dashboard(order)
check_fraud_detection(order)
send_notification(order)
# Kelebihan streaming:
# ✓ Data tersedia dalam detik
# ✓ Cocok untuk alerting & monitoring
# ✓ React ke event secara real-time
Perbandingan
| Aspek | Batch | Streaming |
|---|---|---|
| Latency | Menit sampai jam | Milidetik sampai detik |
| Kompleksitas | Rendah | Tinggi |
| Use case | Daily reports, ETL, ML training | Fraud detection, live dashboard, alerting |
| Tools | Airflow, dbt, Spark batch | Kafka, Flink, Spark Streaming |
| Error handling | Rerun batch | Dead letter queue, replay |
| Cost | Lebih murah | Lebih mahal (always-on infra) |
Lambda & Kappa Architecture
- Lambda — Gabungan batch + stream. Batch untuk accuracy, stream untuk speed. Dua code path (kompleks).
- Kappa — Hanya stream. Semua data sebagai stream, replay untuk reprocessing. Satu code path (simpler).
- Praktis — Mulai dengan batch. Tambahkan streaming hanya untuk use case yang benar-benar butuh real-time.