Batch vs Stream: Ne zaman
Neden hiç seçim
Herhangi bir veri sistemi gecikme, maliyet, destek karmaşıklığı ve güvenilirlik arasında denge kurar.
Toplu - yüksek bant genişliği ve kayıt başına düşük maliyetle periyodik veri "parçaları".
Akış - olayların minimum gecikme ile sürekli işlenmesi ve bellek/yerel sektörlerde durum.
Modeller hakkında kısaca
Toplu iş
Kaynak: dosyalar/tablolar/anlık görüntüler.
Tetikleyici: zamanlama (saat/gün) veya koşul (yeni parke dosyası).
Güçlü yönleri: Basitlik, determinizm, tam veri bağlamı, ucuz büyük yeniden hesaplamalar.
Zayıf: Gerçek zamanlı sinyaller olmadan "çevrimiçi", yüksek gecikme süresi, "pencereler" yok.
Akış
Kaynak: broker (Kafka/NATS/Pulsar), CDC, kuyruklar
Tetik: olay.
Güçlü: düşük gecikme, reaktivite, ürünle doğal entegrasyon.
Zayıf: zaman karmaşıklığı (olay vs işleme), sipariş/kopyalar, durum, işlem.
Çözüm: seçim matrisi
Kural 80/20: SLA dakika/saat gecikmelerine izin veriyorsa ve reaktif özellikler yoksa - toplu olarak alın. Reaksiyon "burada ve şimdi" kritik ise veya canlı vitrinlere ihtiyacınız varsa - akış (genellikle uzlaşma için + ek gece partisi).
Tipik senaryolar
Toplu - daha iyi olduğunda:- Günlük raporlama, dönemler halinde faturalandırma, ML eğitimi, büyük katılımlar,'tüm set ile "veri tekilleştirme.
- Derin validasyonlarla madalyon modeli (bronz/gümüş/altın).
- Toplu arka testler ve mağaza penceresi yeniden montajı.
- Dolandırıcılıkla mücadele/izleme, SRE uyarıları, gerçek zamanlı denge/görevler,'şimdi "önerileri.
- Gerçek-olay (EDC) entegrasyonları, Materyalize Görünüm Güncellemesi (CQRS).
- Mikro hizmetler: bildirimler, web kitapları, iş etkinliklerine verilen tepkiler.
- Akış operasyonel görüntüler ve sinyaller üretir; Gece toplu uzlaşma, kasa ve ucuz tarihi anlatımları yapar.
Mimari
Lambda (Akış + Toplu İş)
Artış ve çevrimiçi akış; Tamlık ve düzeltmeler için toplu.
Artıları: Esneklik ve SLA'lar. Eksileri: çift mantık, kod çoğaltma.
Kappa (все - Stream + Replay)
Gerçeğin kaynağı olarak tek bir kütük; Toplu yeniden hesaplamalar = tekrar oynatma.
Artıları: bir kod tabanı, tek semantik. Eksileri: kullanımı daha zor, günlük depolama gereksinimleri.
Hibrit-Pragmatik
Akış "işletim sistemi" + ağır birleştirmeler/ML/düzeltmeler için periyodik toplu işler.
Pratikte, en yaygın seçenektir.
Zaman, sipariş, pencereler (Stream için)
İşlem zamanına değil, olay zamanına güvenin.
Filigranı ve 'izin verilen _ gecikmeyi' yönetin; Daha sonraki olaylar için geri çekilmeleri/upserts'i destekleyin.
Birim tuşlarına göre bölme, "kısayol tuşları" planı.
Etkilerin güvenilirliği ve semantiği
Toplu iş
Veritabanı işlemleri veya toplu/tabloların atomik değişimi.
Idempotency - deterministik hesaplama ve üzerine yazma/ekleme-üzerine yazma yoluyla.
Akış
En az bir kez + idempotent lavabolar (upsert/birleştirme, agrega sürümleri).
Efekt olarak EOS için işlemsel "okuma-yazma-düzeltme konumu".
'Event _ id'/' operation _ id'ile veri tekilleştirme tabloları.
Tonozlar ve formatlar
Toplu iş
Veri Gölü (Parke/Delta/Iceberg), OLAP (ClickHouse/BigQuery), nesne depolama.
Atomik değişim için ACID tabloları, zaman yolculuğu.
Akış
Komisyoncularda günlükler/konular, devlet mağazaları (RocksDB/embedded), KV/Redis, projeksiyonlar için OLTP.
Şema kayıt defteri (Avro/JSON/Proto), uyumluluk modları.
Maliyet ve SLO
Toplu: Toplu olarak ödeme yaparsınız - büyük hacimlerle kârlıdır, ancak gecikme zamanlamayı ≥.
Akış: sabit çalışma zamanı kaynakları, yüksek QPS'de en yüksek maliyet; Ama saniyeler içinde SLA.
P95/p99 gecikme süresi, geçiş gecikmesi, cu/event maliyeti ve TCO'yu destekleyin.
Test etme
Ortak: altın kümeler, özellik tabanlı değişmezler, kirli girdiler oluşturma.
Batch: determinacy, idempotent yeniden başlatır, tonozların karşılaştırılmasından önce/sonra.
Akış: sıra dışı/kopyalar, etki ve ofset fiksasyonu arasında hata enjeksiyonu, tekrar testleri.
Gözlemlenebilirlik
Toplu: iş süresi, başarısızlık/geri çekilme payı, vitrinlerin tazeliği, tarama maliyeti.
Akış: zaman/mesaj gecikmesi, filigran, geç hız, durum boyutu/kontrol noktası frekansı, DLQ oranı.
Her yerde: 'trace _ id', 'event _ id', şemaların/boru hatlarının sürümleri.
Güvenlik ve veri
PII/PCI - minimize edin, dinlenme/uçuş sırasında şifreleyin, devrelerdeki alanları işaretleyin ('x-pii').
Akış için - devlet/kontrol noktalarının korunması, konular için ACL'ler.
GDPR/unutulma hakkı: Akışta - projeksiyonlarda kripto silme/düzenleme; Toplu olarak - partilerin yeniden hesaplanması.
Geçiş stratejileri
Toplu Akış: Olayları yayınlayarak başlayın (Outbox/CDC), mevcut kasaya dokunmadan küçük bir gerçek zamanlı vitrin yükseltin.
Stream - Batch - Akış lavabolarında raporlama/uzlaşma ve yük azaltma için günlük tonozlar ekleyin.
Anti-desenler
Moda uğruna "All in Stream": pahalı ve gerçek ihtiyaç olmadan zor.
Gereksinimleri <5 dakika ile'bir dev gece partisi ".
İş metrikleri için işlem süresini kullanın.
Kamusal Olaylar Olarak Ham CDC'ler: Sıkı Bağlantı, Evrimde Ağrı.
Lavabolarda idempotency yok - yeniden başlatmalarda çift etki.
Seçim kontrol listesi
- Tazelik SLO: Kaç saniye/dakika/saat kabul edilebilir?
- Giriş Kararlılığı: Sipariş dışı/kopyalar var mı?
- Çevrimiçi tepkilere/vitrinlere ihtiyacım var mı?
- Maliyet: Çalışma zamanı 24/7 vs "zamanlanmış pencere".
- Düzeltme yöntemi geri çekme/yükseltme veya gece yeniden hesaplamasıdır.
- Takım ve operasyonel olgunluk (gözlemlenebilirlik, çağrı üzerine).
- "Tam olarak bir etki" için gereksinimler.
- PII politikaları/retentions/unutulma hakkı.
Referans desenleri
Operasyonel vitrin (Hibrit):- Akış: EDC - UI için projeksiyonlar (KV/Redis, OLTP), idempotent uppert.
- Toplu: OLAP, mutabakat, ML özelliklerinde gece kasası.
- Akış: oturum pencereleri, CEP kuralları, uyarılar <1-5 s.
- Toplu: modelleri yeniden eğitim, çevrimdışı doğrulama.
- Akış: tetikleyiciler, gerçek zamanlı segmentler.
- Toplu: puanlama, LTV modelleri, raporlar.
SSS
Toplu olarak "neredeyse gerçek zamanlı" elde etmek mümkün mü?
Evet: mikrobatches/tetik jabs (her 1-5 dakikada bir) - bir uzlaşma, ancak pencerelerin/geç olayların karmaşıklığı olmadan.
Lambda yaklaşımının her yere ihtiyacı var mı?
Hayır. İplik tüm görevleri kapatırsa ve tekrar oynatmayı biliyorsanız - Kappa'nın uzun olması daha kolaydır. Aksi takdirde - bir melez.
Maliyeti nasıl hesaplanır?
Toplam hesaplama + depolama + ops. Stream için "7/24" kesinti fiyatını ve acil durum gecelerini ekleyin; Toplu iş için - "gecikmiş" verilerin fiyatı.
Sonuç
Düşük maliyet, basitlik ve dönem tonozları önemli olduğunda Batch'i seçin; Akış - reaktivite ve tazelik kritik olduğunda. Uygulamada, melez kazanır: akış - çevrimiçi ve sinyaller için, toplu - bütünlük ve ucuz tarihsel yeniden hesaplamalar için. Önemli olan SLO'yu ayarlamak, idempotensi/gözlemlenebilirliği sağlamak ve düzeltme yolunu önceden tasarlamaktır.