Akym
Akym bejergisi näme?
Akym gaýtadan işlemek, ýagdaýlaryň iň az gijä galmagy we dogrulygyny kepillendirmek bilen, wakalaryň tükeniksiz yzygiderliligine (geleşikleriň, basmalaryň, tölegleriň, telemetriýanyň) üznüksiz reaksiýadyr. "Döwür üçin toplanan zatlaryň hemmesini alýan" batçdan tapawutlylykda, akym maglumatlary gelýänçä gaýtadan işleýär, ýagdaýy saklaýar we wakanyň wagtyny göz öňünde tutýar.
Esasy düşünjeler
Waka (event) - 'event _ time' we özboluşly 'event _ id' bilen üýtgewsiz hakykat.
Wakanyň wagty (event time) vs gaýtadan işlemek wagty (processing time) - birinjisi çeşmeden gelýär, ikinjisi - operator wakany hakykatdanam gören wagty.
- Tumbling (örtülmez), Hopping/Sliding (örtükli), Session (hereketsizlik boşluklary).
- Suw alamatlary (watermarks) - penjireleri ýapmaga we gijä galan maglumatlara garaşmagy çäklendirmäge mümkinçilik berýän "T pursatyndan öň wakalaryň gelendigini" çaklamak.
- Gijä galan maglumatlar (lateness) - 'event _ time' wakalary häzirki watermark-dan az; gaýtadan işlemegiň düzgünleri köplenç ulanylýar.
- State (state) - agregatlar, join's, deduplikasiýa üçin operatorlaryň ýerli tablisalary/ammarlary (keyed state).
- Backpressure - downstream kuwwatyndan ýokary bolan basyş; teswirnama we buferler bilen dolandyrylýar.
Binagärlik esaslary
1. Çeşme: Wakalaryň brokeri (Kafka/NATS/Pulsar), DB-den CDC, nobatlar, faýllar/log-kollektorlar.
2. Akym hereketlendirijisi: penjireleri, agregatlary, joýnlary, patternleri (CEP) hasaplaýar, ýagdaýy we barlag nokatlaryny dolandyrýar.
3. Kabul ediji (sink): OLTP/OLAP DB, gözleg motory, keş, topikler, penjireler/hasabatlar üçin ammar.
4. Shemalaryň sanawy: payload ewolýusiýasyna we laýyklygyna gözegçilik etmek.
5. Syn edilişi: metrikler, treýsing, loglar, lagyň we suw belgileriniň daşbordlary.
Wagt we tertip semantikasy
Elmydama çäräni halaň: gijikdirilende we arakesmelerde bu ýeke-täk üýtgeşiklik.
Wakalar tertipden daşary gelip biler; tertip diňe partiýanyň açarynyň çäklerinde kepillendirilýär.
- penjireleri ýapmak we netijeleri çykarmak;
- "Näçe garaşýandygymyzy" çäklendirmek ('allowed _ lateness').
- Gijä galan wakalar üçin retractions/upserts: agregatlary we düzediş wakalaryny gaýtadan hasaplaň.
Ýagdaýy we ygtybarlylygy
Keyed state: Bu agregatlar (summalar, hasaplaýjylar, atanyň gurluşlary) şarding arkaly açarlar boýunça paýlanýar.
Checkpoint/Savepoint: dikeldiş üçin wagtal-wagtal suratlar; savepoint - kod görnüşiniň göçmegi üçin dolandyrylýan surat.
- "okadym-işledim-ýazdym" (commit sink + okamak pozisiýasy);
- idempotent sinks (upsert/merge) + babyň tablisalary;
- agregatlaryň wersiýasy (optimistic concurrency).
Penjireler, agregasiýalar, join's
Penjireler:- Tumbling: ýönekeý döwürleýin hasabatlar (minut, sagat).
- Hopping/Sliding: "süýşýän" metrikler (1 minut ädim bilen 5 minutda).
- Session: ulanyjy sessiýalary we antifrod üçin tebigy zat.
- Aggregations: sum/count/avg/approx-distinct (HyperLogLog), percentiles (TDigest/CKMS).
- Stream-Stream join: iki tarapyň hem açar we wagt boýunça buferlenmegini talap edýär, 'allowed _ skew' -e hormat goýuň.
- Akym-Table join (KTable): gollanmany ýa-da häzirki ýagdaýy birikdirmek (mysal üçin, "ulanyjynyň işjeň çäkleri").
Giç we gaýtalanýan maglumatlar bilen işlemek
Duplikasiýa: 'event _ id' ýa-da '(producer_id, sequence)'; TTL bilen "görünýän" açarlary gaýtalanýan penjireler ≥ saklaň.
Late events: ýapylandan soň 'X' -de penjiräni täzeden düzmäge rugsat beriň (retractions/upserts).
Galp dublikatlar: agregatlary idempotent düzediň we "ALREADY_APPLIED" loglarda ýazyň.
Ölçeg we öndürijilik
Açar boýunça şardlamak: paralelligi üpjün edýär; "gyzgyn" açarlara gözegçilik ediň.
Backpressure: Paralelligi çäklendiriň, çap edilende batçi we gysyş ulanyň.
Suw bellikleri: gaty agressiw goýmaň - gaty suw marklary garaşmagy azaldýar, ýöne täzelenmeleriň paýyny ýokarlandyrýar.
Döwlet: elýeterlilik ölçeglerini we nusgalaryny göz öňünde tutup, formaty (RocksDB/state store/ýatda) saýlaň; TTL arassalaň.
Awtomatiki masştab: lagy, CPU, state ululygy, GC wagty boýunça.
Ygtybarlylyk we täzeden başlamak
Idempotent sink ýa-da ofseti düzmek bilen geleşik topary - dogrulygyň esasydyr.
Gaýtadan işe girizilenden soň gaýtadan işlemäge ýol berilýär; täsir "takyk bir gezek" galmalydyr.
DLQ/parking lot: kynçylykly ýazgylary sebäpler bilen aýratyn akymyna iberiň; gaýtadan işlemegi üpjün ediň.
Synlamak (näme ölçemeli)
Çeşmelere görä (wagt we habar boýunça).
Watermark/current event time we late-wakalaryň paýy.
Throughput/latency operatorlary, p95/p99 end-to-end.
State size/rocksdb I/O, ýygylygy/dowamlylygy.
DLQ rate, de duplikasiýalaryň/retraýlaryň göterimi.
CPU/GC/heap, arakesme wagty.
Howpsuzlyk we laýyklyk
Maglumatlaryň klassifikasiýasy: PII/PCI-ni shemalarda belläň, iň az saklaň, state we snapshotlary şifrläň.
Access control: state we sinks topiklerine aýratyn ACL.
Retensiýa: hukuk talaplaryna laýyk gelýär (GDPR/ýatdan çykarmak hukugy).
Audit: 'event _ id', 'trace _ id', netijesini ýazyň: 'APPLIED/ALREADY _ APPLIED/RETRIED'.
Giriş nusgalary
1. CDC → kadalaşma → domen wakalary: çig DB üýtgeşmelerini ýaýratmaň, düşnükli iş faktlaryna ýüz tutuň.
2. Öndürijilerde Outbox: amalyň hakykaty + waka - bir DB-amalda.
3. Core vs Enriched: möhüm akymda iň az töleg, baýlaşdyrmak - asinhron.
4. Replay-dostluk: proýeksiýalar/penjireler ýazgydan täzeden gurulmalydyr.
5. Idempotency by design: operation/event key, upsert-shemalar, agregatlaryň wersiýalary.
Synag
Unit/Property-based: agregatlaryň we üýtgeşmeleriň üýtgemegi.
Stream tests: out-of-order we dublikatlar bilen hadysalaryň kesgitlenen akymy → penjireleri we atany barlamak.
Golden Windows: Standart penjireler/agregatlar we giç düzedişler.
"Fault-injection": "effekt ýazdy" we "kommital ofset" arasynda düşmek.
Replay tests: sahypanyň başyndan penjiräni täzeden düzmek = häzirki ýagdaý.
Bahasy we optimizasiýasy
Penjireler we watermark gijikdirmä/çeşmelere täsir edýär: penjire näçe uzyn we 'allowed _ lateness' köp bolsa, şonça-da köp state.
Kodekler we gysyş: CPU/tory deňleşdiriň.
Çykyşda Batching: Az tor jaňlary we amallary.
Süzmek ir ("pushdown"): çeşmä mümkin boldugyça ýakynlaşyň.
Anti-patternler
Processing time-da, zerur bolan ýerinde baglanyşyk → nädogry analitika.
Restartlarda sink → iki esse täsir etmeýär.
Global "mega-açarlar": bir gyzgyn bölüm paralelligi bozýar.
Çig CDC jemgyýetçilik wakalary hökmünde: DB shemalarynyň syzmagy, ewolýusiýanyň gowşaklygy.
DLQ ýok: "zäherli" habarlar tutuş konweýeri petikleýär.
Watermark ýerine kesgitlenen gaty gijikdirme: ýa baky garaşmak ýa-da maglumatlary ýitirmek.
Domen mysallary
Tölegler/Maliýe
Akym 'payment.', antifrod üçin penjireler (session + CEP), 'operation _ id' üçin deadup.
Buhgalteriýa ledger (upsert + wersiýa).
Marketing/mahabat
CTR/konwersiýa penjiresini sliding, Join '± Δ t', bidding üçin agregasiýa.
iGaming/Onlaýn hyzmatlar
Real-wagt balans/çäklendirmeler, missiýalar/açuwlar (session penjireler), antifrod-patternler we duýduryşlar.
Kiçi şablonlar (psevdokod)
Suw belgili penjire
pseudo stream
.withEventTime(tsExtractor)
.withWatermark(maxAllowedLag=2m)
.window(TUMBLING, size=1m, allowedLateness=30s)
.keyBy(user_id)
.aggregate(sum, retractions=enable)
.sink (upsert_table )//idempotent upsert by (user_id, window_start)
Ofseti düzmek bilen geleşik sink
pseudo begin tx upsert target_table using event, key=(k)
update consumer_offsets set pos=:pos where consumer=:c commit
Önümçiligiň çek-sanawy
- Wakanyň wagty we watermark strategiýasy kesgitlenildi; 'allowed _ lateness' penjireleri saýlandy.
- Idempotent sink ýa-da ofset bilen geleşik topary.
- Shemalaryň sanawy we laýyklyk düzgünleri girizildi; goşmaça ewolýusiýa.
- Metrikler: lag, watermark, p95/p99, DLQ, state ululygy, checkpoint dowamlylygy.
- Synaglar: out-of-order, dublikatlar, täzeden başlamalar, replay.
- Döwlet we snapshotlar üçin PII/retensiýa syýasaty.
- Ölçeg meýilnamasy we backpressure strategiýasy.
- Penjire şertnamalary we düzedişler boýunça resminamalar (late updates).
FAQ
Waka wagty hökmanymy?
Metrleriň dogrulygy we sazlaşygy möhüm bolsa, hawa. Amal wagty tehniki hasaplar/gözegçilik üçin amatlydyr, ýöne analitikany ýoýýar.
exactly-once gerekmi?
Takyk: möhüm täsirler üçin. Köplenç at-least-once + idempotent sink ýeterlikdir.
Penjireleri nädip saýlamaly?
Iş SLA-dan başlaň: "soňky 5 minutda" → hopping, "ulanyjy sessiýalary" → session, "minutlyk hasabatlar" → tumbling.
Giç maglumatlar bilen näme etmeli?
Çäklendirilen 'allowed _ lateness' -e rugsat bermek we düzedişleri çykarmak (upsert/retract). Müşderi penjiresi täzelenip bilmelidir.
Jemi
Akym bejergisi diňe bir pes gijikdirme däl, eýsem wagtyň, ýagdaýyň we şertnamalaryň düzgünidir. Wakanyň wagty, penjireleri we suw belgilerini dogry saýlamak, üstesine-de, dempotent täsirleri, gözegçilik we synaglar konweýeri ygtybarly, köpeldip bolýan we tygşytly edýär - we işewürlige "gijeden soň" däl-de, "şu wagt we şu wagt" çözgütlerini berýär.