Batch vs Stream: qachon nima
Nima uchun tanlash kerak
Har qanday ma’lumotlar tizimi yangilik, qiymat, qo’llab-quvvatlashning murakkabligi va ishonchlilik o’rtasida muvozanatni saqlaydi.
Batch - yozuv uchun yuqori o’tkazish qobiliyatiga va past qiymatga ega bo’lgan ma’lumotlarning davriy «porsiyalari».
Stream - xotirada/lokal storlarda minimal kechikish va holati bilan voqealarni uzluksiz qayta ishlash.
Modellar haqida qisqacha
Batch
Manba: fayllar/jadvallar/snapshotlar.
Trigger: jadval (soat/kun) yoki shart (yangi parket-fayl).
Kuchli tomonlari: soddaligi, determinizmi, ma’lumotlarning to’liq konteksti, arzon katta hisob-kitoblar.
Zaiflar: «onlayn» yo’q, yuqori latentlik, real vaqt signallarisiz «derazalar».
Stream
Manba: brokerlar (Kafka/NATS/Pulsar), CDC, navbatlar.
Trigger: hodisa.
Kuchli: past kechikish, reaktivlik, mahsulot bilan tabiiy integratsiya.
Zaif: vaqtning murakkabligi (event vs processing), tartibi/dubli, holati, ekspluatatsiyasi.
Yechim: tanlash matritsasi
80/20 qoidasi: agar SLA bir daqiqa/soat kechikish imkonini bersa va reaktiv fich boʻlmasa, batch oling. Agar «bu yerda va hozir» degan javob muhim bo’lsa yoki jonli vitrinalar kerak bo’lsa - stream (ko’pincha tekshirish uchun qo’shimcha tungi batch).
Namunaviy stsenariylar
Batch - qachon yaxshiroq:- Kundalik hisobot, billing davrlari, ML-trening, yirik joinlar, «butun to’plam bilan» deduplikatsiyasi.
- Chuqur validatsiyali medalon-model (bronze/silver/gold).
- Ommaviy bektestlar va vitrinalarni qayta yig’ish.
- Antifrod/monitoring, SRE alertlari, real-time balans/missiyalar, «hozir» tavsiyalar.
- «Hodisa-fakt» integratsiyasi (EDC), materiallashtirilgan tasavvurlarni yangilash (CQRS).
- Mikroservislar: notifikatsiyalar, vebxuklar, biznes voqealariga munosabat.
- Oqim operatsion vitrinalar va signallarni shakllantiradi; tungi batch taqqoslash, jamlash va arzon tarixiy qayta hisoblashlarni amalga oshiradi.
Arxitektura
Lambda (Stream + Batch)
Inkrement va onlayn uchun Stream; Batch to’liqlik va tuzatishlar uchun.
Afzalliklari: moslashuvchanlik va SLA. Kamchiliklar: ikki tomonlama mantiq, kodni takrorlash.
Kappa (все — Stream + Replay)
Yagona log haqiqat manbai sifatida; batch-qayta hisoblash = replay.
Afzalliklari: bitta kod bazasi, yagona semantika. Minuslar: foydalanish qiyinroq, logni saqlash talablari.
Hybrid-Pragmatic
Og’ir joinlar/ML/tuzatishlar uchun vaqti-vaqti bilan batch-joblar.
Amalda - eng keng tarqalgan variant.
Vaqt, tartib, oynalar (Stream uchun)
Processing time emas, balki event time ga tayaning.
Watermark va’allowed _ lateness’ni boshqaring; Kechki voqealar uchun retractions/upserts dasturini qoʻllab-quvvatlang.
Agregatlar kalitlari bo’yicha partiyalashtiring, «issiq kalitlar» ni rejalashtiring.
Samaralarning ishonchliligi va semantikasi
Batch
DB tranzaksiyalari yoki partiyalar/jadvallarni atom almashtirish.
Idempotentlik - deterministic-hisoblash va overwrite/insert-overwrite orqali.
Stream
At-least-once + idempotent sinks (upsert/merge, agregatlar versiyasi).
Effekt bo’yicha EOS uchun tranzaksion «o’qish-yozish-qayd qilish».
’event _ id ’/’ operation _ id’ boʻyicha dedup jadvallari.
Saqlash va formatlar
Batch
Data Lake (Parquet/Delta/Iceberg), OLAP (ClickHouse/BigQuery), obyekt ombori.
atomic replace, time travel uchun ACID jadvallari.
Stream
Logi/mavzular brokerlarda, state stores (RocksDB/embedded), KV/Redis, OLTP proyeksiyalari uchun.
Sxemalar reyestri (Euro/JSON/Proto), muvofiqlik rejimlari.
Qiymati va SLO
Batch: «qutilar» bilan to’laysiz - katta hajmlarda foydalidir, lekin ≥ jadvalni kechiktirish.
Stream: doimiy rantaym resurslari, yuqori QPSda eng yuqori qiymat; lekin SLA soniyada.
p95/p99 latency, kechikish, u.e./hodisa qiymati va TCOni qo’llab-quvvatlang.
Test oʻtkazish
Umumiy: golden-to’plamlar, property-based invariantlar, iflos kirish hosil qilish.
Batch: determinatsiya, idempotent qayta ishga tushirish, «oldin/keyin» ustunlarini taqqoslash.
Stream: out-of-order/dublikatlar, fault-injection effekt va ofset fiksatsiyasi oʻrtasida, replay-testlar.
Observabiliti
Batch: job davomiyligi, fayllar/retraylar ulushi, vitrinalarning yangiligi, skan-cost.
Stream: vaqt/xabarlar, watermark, late-rate, state oʻlchami/checkpoint chastotasi, DLQ-stavka.
Hamma joyda:’trace _ id’,’event _ id’, sxemalar/konveyerlar versiyasi.
Xavfsizlik va ma’lumotlar
PII/PCI - minimallashtirish, at-rest/in-flight shifrlash, sxemalardagi maydonlarni belgilash (’x-pii’).
Stream uchun - state/checkpoint’lar himoyasi, topiklarga ACL.
GDPR/unutish huquqi: Stream - proyeksiyalarda kripto-o’chirish/tahrirlash; Batch - partiyalarni qayta hisoblash.
O’tish strategiyalari
Batch → Stream: Voqealarni nashr etishdan boshlang (Outbox/CDC), mavjud to’plamga tegmasdan real-vaqtning kichik oynasini ko’taring.
Stream → Batch: Har kuni hisobot/taqqoslash va oqim yukini kamaytirish uchun kundalik toʻplamlarni qoʻshing.
Anti-patternlar
«Hamma narsa Streamda» moda uchun: haqiqiy ehtiyojsiz qimmat va qiyin.
«Bitta gigant tungi batch» talablar bilan <5 daqiqa.
Biznes metriklar uchun processing time dan foydalanish.
Xom CDClar ommaviy voqealar sifatida: qattiq aloqa, evolyutsiya paytida og’riq.
sinks → restartlarda ikki marta effektlar mavjud emas.
Tanlash chek varaqasi
- SLO yangilik: qancha soniya/daqiqa/soat mumkin?
- Kirish barqarorligi: out-of-order/dublikatlar bormi?
- Onlayn reaksiyalar/vitrinalar kerakmi?
- Narxi: rantaym 24/7 vs «jadval bo’yicha oyna».
- Tuzatish usuli: retract/upsert yoki tungi qayta hisoblash.
- Jamoa va operatsion yetuklik (observability, on-call).
- «Aynan bitta effektga» talablar.
- PII/retensiya/unutish huquqi siyosati.
Referens-patternlar
Operatsion vitrin (Hybrid):- Stream: EDC → UI uchun proyeksiyalar (KV/Redis, OLTP), idempotent upsert.
- Batch: nightly to’plami OLAP, reconciliation, ML-fichida.
- Stream: session-derazalar, CEP-qoidalar, alertlar <1-5 s.
- Batch: modellarni qayta tayyorlash, oflayn validatsiya.
- Stream: triggerlar, real vaqt segmentlari.
- Batch: skoringlar, LTV modellari, hisobotlar.
FAQ
Batchda «deyarli real-time» olish mumkinmi?
Ha: mikrobatchi/trigger joblar (har 1-5 daqiqada) - murosa, ammo deraza murakkabliklarisiz/late-events.
Lambda-yondashuv hamma joyda kerakmi?
Yo’q. Agar oqim barcha vazifalarni yopsa va siz replay qilishni bilsangiz - Kappa uzoq muddatga osonroq. Aks holda - gibrid.
Narxni qanday hisoblash kerak?
compute + storage + ops. Stream uchun «24/7» va favqulodda kechalar narxini qo’shing; Batch uchun - ma’lumotlarning «kechiktirilgan» narxi.
Jami
Past qiymat, soddaligi va davriyligi muhim bo’lganda, Batchni tanlang; Stream - reaktivlik va yangilik muhim bo’lganda. Amalda gibrid g’alaba qozonadi: onlayn va signallar uchun oqim, to’liq va arzon tarixiy hisob-kitoblar uchun batch. Asosiysi, SLOni belgilash, idempotentlik/kuzatuvni ta’minlash va tuzatish yo’lini oldindan loyihalash.