Batch vs Stream: қашан не
Мүлдем таңдаудың қажеті жоқ
Кез келген деректер жүйесі жаңалық (latency), құн, қолдау күрделілігі мен сенімділік арасында теңгеріледі.
Batch - жоғары өткізу қабілеті және жазба үшін құны төмен деректердің мерзімді «порциялары».
Stream - оқиғаларды ең аз кідіріспен және жад/жергілікті стоктардағы күймен үздіксіз өңдеу.
Үлгілер туралы қысқаша
Batch
Дереккөз: файлдар/кестелер/снапшоттар.
Триггер: кесте (сағат/күн) немесе шарт (жаңа паркет-файл).
Күшті жақтары: қарапайымдылық, детерминизм, толық деректер контексі, арзан үлкен есептеулер.
Әлсіз: «онлайн» жоқ, жоғары жасырындылық, нақты уақыт сигналдары жоқ «терезелер».
Stream
Дереккөз: брокерлер (Kafka/NATS/Pulsar), CDC, кезектер.
Триггер: оқиға.
Күшті: төмен кідіріс, реактивтілік, өніммен табиғи интеграция.
Әлсіз: уақыттың күрделілігі (event vs processing), тәртіп/дубль, жай-күй, пайдалану.
Шешім: таңдау матрицасы
80/20 ережесі: егер SLA минуттық/сағаттық кідірістерге мүмкіндік берсе және реактивті фич болмаса - batch алыңыз. Егер «осында және қазір» реакциясы сыни болса немесе тірі витриналар қажет болса - stream (жиі + тексеру үшін қосымша түнгі batch).
Үлгі сценарийлер
Batch - қашан жақсы:- Күнделікті есептілік, кезеңдермен биллинг, ML-тренинг, ірі джоиндер, «барлық жиынтықпен» дедупликация.
- Терең валидациялы медальон-модель (bronze/silver/gold).
- Сөрелерді жаппай жинау және қайта жинау.
- Антифрод/мониторинг, SRE, real-time баланс/миссия, «қазір» ұсынымдары.
- «Оқиға-факт» интеграциясы (EDC), материалдандырылған көріністерді жаңарту (CQRS).
- Микросервистер: нотификациялар, вебхактар, бизнес оқиғаларға реакциялар.
- Ағын операциялық сөрелер мен сигналдарды қалыптастырады; түнгі batch салыстыру, жиынтық және арзан тарихи қайта есептеулер жасайды.
Сәулет
Lambda (Stream + Batch)
Инкремент және онлайн үшін Stream; Толық және түзету үшін Batch.
Артықшылықтары: икемділік және SLA. Кемшіліктері: қосарлы логика, кодты қайталау.
Kappa (все — Stream + Replay)
Ақиқат көзі ретінде бірыңғай лог; batch-қайта есептеулер = replay.
Артықшылықтары: бір кодтық база, бірыңғай семантика. Кемшіліктері: пайдалану күрделірек, логты сақтауға қойылатын талаптар.
Hybrid-Pragmatic
Ауыр джоиндер/ML/түзетулер үшін ағынды «операциялық» + мерзімді batch-джобтар.
Іс жүзінде - ең кең таралған нұсқа.
Уақыт, тәртіп, терезелер (Stream үшін)
processing time емес, event time-ға сүйеніңіз.
watermark және 'allowed _ lateness' басқарыңыз; Кешірек оқиғалар үшін retractions/upserts бағдарламасын қолдаңыз.
Агрегаттардың кілттері бойынша партияланыңыз, «ыстық кілттерді» жоспарлаңыз.
Әсерлердің сенімділігі мен семантикасы
Batch
БД транзакциялары немесе партияларды/кестелерді атомарлық ауыстыру.
Теңсіздік - deterministic-есептеулер және overwrite/insert-overwrite арқылы.
Stream
At-least-once + іспеттес sinks (upsert/merge, агрегаттардың нұсқалары).
EOS үшін әсері бойынша транзакциялық «оқылды-жазылды-бекітілді».
'event _ id '/' operation _ id' дедуп кестелері.
Сақтау орындары мен пішімдері
Batch
Data Lake (Parquet/Delta/Iceberg), OLAP (ClickHouse/BigQuery), объектілік сақтау орны.
atomic replace, time travel үшін ACID-кестелер.
Stream
Логи/тақырыптар брокерлерде, state stores (RocksDB/embedded), KV/Redis, OLTP проекциялары үшін.
Схемалар тізілімі (Euro/JSON/Proto), үйлесімділік режимдері.
Құны және SLO
Batch: «бумалармен» төлейсіз - үлкен көлемде тиімді, бірақ ≥ кестенің кешігуі.
Stream: тұрақты рантайм-ресурстар, жоғары QPS кезінде ең жоғары құн; бірақ SLA секундпен.
p95/p99 latency, өтпелі артта қалу, ш.е. құны/оқиға және TCO қолдау санаңыз.
Тестілеу
Жалпы: golden-жиынтықтар, property-based инварианттар, лас кіру генерациясы.
Batch: детерминация, демпотенттік қайта іске қосу, «дейін/кейін» жиынтықтарын салыстыру.
Stream: out-of-order/телнұсқалар, fault-injection әсері мен офсетті бекіту арасында, replay-тестілер.
Обсервабилити
Batch: джоб ұзақтығы, фейлдер/ретрайлардың үлесі, витриналардың жаңаруы, скан-cost.
Stream: уақыт/хабарлар бойынша артта қалу, watermark, late-rate, state өлшемі/checkpoint жиілігі, DLQ-ставка.
Барлық жерде: 'trace _ id', 'event _ id', схемалар/конвейерлер нұсқалары.
Қауіпсіздік және деректер
PII/PCI - ең аз, at-rest/in-flight шифрлау, схемалардағы өрістерді белгілеу ('x-pii').
Stream үшін - state/checkpoint's, ACL-ді топиктерге қорғау.
GDPR/ұмыту құқығы: Stream - проекциялардағы крипто-өшіру/редакциялау; Batch - партияларды қайта есептеу.
Өтпелі стратегиялар
Batch → Stream: Оқиғаларды жариялаудан бастаңыз (Outbox/CDC), бар жиынтыққа тиіспей, шағын шынайы уақыт сөресін көтеріңіз.
Stream → Batch: есеп беру/тексеру және sinks ағындарына жүктемені азайту үшін күнделікті жиынтықтарды қосыңыз.
Қарсы үлгілер
Сән үшін «Барлығы Stream»: қымбат және нақты қажеттіліксіз қиын.
«Бір алпауыт түнгі batch» талаптары <5 минут.
Бизнес-метриктер үшін processing time пайдалану.
Қоғамдық оқиғалар ретінде шикі CDC: қатты байланыс, эволюция кезіндегі ауырсыну.
Синкте сәйкессіздік жоқ → Қайта қарауларда екі есе әсерлер.
Таңдау парағы
- SLO жаңалық: қанша секунд/минут/сағат рұқсат етіледі?
- Кіріс тұрақтылығы: out-of-order/телнұсқалар бар ма?
- Онлайн реакциялар/витриналар қажет пе?
- Құны: рантайм 24/7 vs «кесте бойынша терезе».
- Түзету тәсілі: retract/upsert немесе түнгі қайта есептеу.
- Команда және операциялық жетілу (обсервабилити, on-call).
- «Дәл бір әсерге» қойылатын талаптар.
- PII/ретенция/ұмытылу құқығы.
Референс-үлгілер
Операциялық витрина (Hybrid):- Stream: EDC → UI үшін проекциялар (KV/Redis, OLTP), демпотенттік upsert.
- Batch: nightly OLAP, reconciliation, ML-фичи жиынтығы.
- Stream: session-терезелер, CEP-ережелер, алерта <1-5 с.
- Batch: модельдерді қайта оқыту, оффлайн валидация.
- Stream: триггерлер, нақты уақыттағы сегменттер.
- Batch: скорингтер, LTV модельдері, есептер.
FAQ
batch арқылы «real-time» алуға бола ма?
Иә: микробатчи/триггерлік джобтар (әрбір 1-5 минут сайын) - ымыраға келу, бірақ терезе қиындықтарынсыз/late-events.
Lambda-тәсілі барлық жерде қажет пе?
Жоқ. Егер ағын барлық тапсырмаларды жабатын болса және сіз replay жасай алсаңыз - Kappa ұзақ уақытқа оңай. Әйтпесе - гибрид.
Құнын қалай есептеуге болады?
compute + storage + ops жиынтықтаңыз. Stream үшін «24/7» бос тұрып қалу және апаттық түндер бағасын қосыңыз; Batch үшін - деректердің «мерзімі өткен» бағасы.
Жиынтық
Төмен құн, қарапайымдылық және мерзімді жиынтықтар маңызды болған кезде Batch таңдаңыз; Stream - реактивтілік пен ашықтық сыни болғанда. Іс жүзінде гибрид жеңеді: ағын - онлайн және дабылдар үшін, батч - толықтық және арзан тарихи қайта есептеулер үшін. Ең бастысы - SLO-ны белгілеу, демпотенттілікті/қадағаланушылықты қамтамасыз ету және түзету жолын алдын ала жобалау.