Axın emalı
Axın emalı nədir
Axın emalı - minimal gecikmə və vəziyyətlərin düzgünlüyünə zəmanət verən sonsuz hadisələr ardıcıllığına (əməliyyatlar, kliklər, ödənişlər, telemetriya) davamlı reaksiyadır. «Bir müddət ərzində yığılan hər şeyi götürdüyümüz» batçdan fərqli olaraq, axın daxil olduqda məlumatları emal edir, vəziyyəti saxlayır və hadisənin vaxtını nəzərə alır.
Açar anlayışlar
Hadisə (event) - 'event _ time' və unikal 'event _ id' ilə dəyişməz faktdır.
Hadisə vaxtı (event time) vs emal vaxtı (processing time) - birincisi mənbədən gəlir, ikincisi - operator hadisəni həqiqətən gördükdə.
- Tumbling (örtülməz), Hopping/Sliding (örtüklü), Session (aktiv olmayan boşluqlar).
- Su işarələri (watermarks) - pəncərələri bağlamağa və gecikmiş məlumatların gözləntilərini məhdudlaşdırmağa imkan verən «T anına qədər hadisələr artıq gəldi» qiymətləndirməsi.
- Gecikmiş məlumatlar (lateness) - 'event _ time' hadisələri cari watermark-dan azdır; tez-tez təkmilləşdirmə qaydaları tətbiq olunur.
- State (state) - aqreqatlar, join 's, deduplikasiya üçün operatorların lokal cədvəlləri/anbarları (keyed state).
- Backpressure - downstream həddini aşdıqda təzyiq; protokol və buferlər tərəfindən idarə olunur.
Memarlıq əsasları
1. Mənbə (mənbə): hadisə brokeri (Kafka/NATS/Pulsar), DB-dən CDC, növbələr, fayllar/log kollektorları.
2. Axın mühərriki: pəncərələri, aqreqatları, coynları, nümunələri (CEP) hesablayır, vəziyyəti və yoxlamaları idarə edir.
3. Alıcı (sink): OLTP/OLAP DB, axtarış motoru, cache, topics, vitrin/hesabat anbarları.
4. Sxemlərin reyestri: payload təkamül və uyğunluq nəzarət.
5. Müşahidə: metriklər, treysinq, loqlar, lag və su işarələrinin daşbordları.
Zaman semantikası və nizam
Həmişə hadisə vaxtına üstünlük verin: gecikmələr və fasilələr zamanı bu yeganə alternativdir.
Hadisələr sıradan çıxa bilər; sifariş yalnız partiyanın açarı daxilində təmin edilir.
- pəncərələri bağlamaq və nəticələri buraxmaq;
- gecikmiş hadisələri ('allowed _ lateness') məhdudlaşdırmaq.
- Gecikmiş hadisələr üçün retractions/upserts istifadə edin: aqreqatların yenidən hesablanması və düzəliş hadisələri.
Dövlət və etibarlılıq
Keyed state: aqreqatların məlumatları (məbləğlər, sayğaclar, babanın strukturları) açarlar üzrə paylanır.
Checkpoint/Savepoint: bərpa üçün dövri vəziyyət şəkilləri; savepoint - kod versiyasının miqrasiyası üçün idarə olunan şəkil.
- əməliyyat «oxu-emal-qeyd» (commit sink + oxu mövqeyi);
- idempotent sinks (upsert/merge) + dedup cədvəllər;
- aqreqatların versiyalaşdırılması (optimistic concurrency).
Pəncərələr, aqreqasiyalar, join's
Pəncərələr:- Tumbling: sadə dövri hesabatlar (dəqiqə, saat).
- Hopping/Sliding: «sürüşmə» metriklər (1 dəq addım ilə 5 dəq).
- Session: xüsusi sessiyalar və antifrod üçün təbii.
- Aggregations: sum/count/avg/approx-distinct (HyperLogLog), percentiles (TDigest/CKMS).
- Stream-Stream join: hər iki tərəfin açar və vaxt tamponlaması tələb edir, 'allowed _ skew' -ə hörmət edin.
- Stream-Table join (KTable): məlumat kitabçasına və ya cari vəziyyətə qoşulma (məsələn, «aktiv istifadəçi limitləri»).
Gecikmiş və təkrarlanan məlumatlarla işləmək
Deduplikasiya: 'event _ id' və ya '(producer_id, sequence)'; TTL ≥ təkrar pəncərələri ilə «görünən» açarları saxlayın.
Late events: qapandıqdan sonra 'X' ərzində pəncərənin yenidən işlənməsinə icazə verin (retractions/upserts).
Saxta təkrarlar: aqreqatları idempotent qaydasında düzəldin və «ALREADY_APPLIED» lojalara yazın.
Ölçmə və performans
Açar çardaqlama: paralelliyi təmin edir; «isti» açarları izləyin.
Backpressure: paralelliyi məhdudlaşdırın, dərc edərkən batches və sıxışdırmadan istifadə edin.
Su işarələri: çox aqressiv qoymayın - sərt watermarks gözləntiləri azaldır, lakin late yeniləmələrin payını artırır.
Hal: ölçüsü və giriş nümunələri nəzərə alınmaqla (RocksDB/state store/yaddaş) formatını seçin; TTL təmizləyin.
Avtomatik miqyaslandırma: lag, CPU, state ölçüsü, GC vaxtı.
Etibarlılıq və yenidən başlamaq
İdempotent sink və ya ofset fiksasiyası ilə əməliyyat kommiti düzgünlüyün əsasını təşkil edir.
Yenidən başladıqdan sonra təkrar emala icazə verilir; effekt «düz bir dəfə» qalmalıdır.
DLQ/parking lot: problemli qeydləri səbəbləri ilə ayrı bir axına göndərin; təkrar emal təmin edin.
Müşahidə (ölçmək üçün)
Mənbələrə görə Lag (vaxtına və mesajına görə).
Watermark/current event time və late hadisələrin payı.
Throughput/latency operatorları, p95/p99 end-to-end.
State size/rocksdb I/O, tezlik checkpoint 's/uzunluğu.
DLQ rate, deduplikasiya/retraj faizi.
CPU/GC/heap, fasilə vaxtı.
Təhlükəsizlik və uyğunluq
Verilənlərin təsnifatı: PII/PCI sxemlərdə qeyd edin, minimum saxlayın, state və snapshotları şifrələyin.
Access control: topik/state cədvəllər və sinks ayrı-ayrı ACL.
Retens: hüquqi tələblərə uyğundur (GDPR/unudulmaq hüququ).
Audit: log 'event _ id', 'trace _ id', nəticə: 'APPLIED/ALREADY _ APPLIED/RETRIED'.
Tətbiq nümunələri
1. CDC → normalizasiya → domen hadisələri: xam DB dəyişikliklərini yayımlamayın, başa düşülən biznes faktlarına map edin.
2. Outbox istehsalçılarda: əməliyyat faktı + hadisə - bir DB əməliyyatında.
3. Core vs Enriched: kritik axınında minimum payload, zənginləşdirmə - asenxron.
4. Replay-dostluq: proyeksiyalar/vitrinlər logdan yenidən yığılmalıdır.
5. Idempotency by design: operation/event key, upsert sxemləri, aqreqatların versiyaları.
Test
Unit/Property-based: aqreqat və transformasiya invariantları.
Stream tests: out-of-order və dublikatlar ilə sabit hadisələr axını → Windows və babanın yoxlama.
Golden Windows: istinad pəncərələri/aqreqatları və icazə verilən gec düzəlişlər.
Fault-injection: arasında düşməsi «qeyd effekti» və «kommitul ofset».
Replay tests: log başlanğıcından vitrin yenidən yığılması = cari vəziyyət.
Qiymət və optimallaşdırma
Pəncərələr və watermark gecikmə/resursları təsir edir: pəncərə nə qədər uzun və daha çox 'allowed _ lateness', daha çox state.
Codec & Kompression: CPU/Network balans.
Çıxış Batching: daha az şəbəkə zəngləri və əməliyyatlar.
Erkən filtrasiya («pushdown»): mənbəyə mümkün qədər çox atın.
Antipatternlər
Processing time-da bağlanma, hadisə vaxtı lazım olan yerdə → yanlış analitika.
sink yoxluğu → restarts ikiqat effekt.
Qlobal mega-açarlar: bir isti bölmə paralelliyi pozur.
İctimai hadisələr kimi xam CDC: DD sxemlərinin sızması, təkamül zamanı kövrəklik.
DLQ yoxdur: «zəhərli» mesajlar bütün konveyeri bloklayır.
Watermark əvəzinə sabit sərt gecikmə: ya əbədi gözləmə, ya da məlumat itkisi.
Domen nümunələri
Ödənişlər/Maliyyə
Axın 'payment.', antifrod pəncərələri (session + CEP), dedup 'operation _ id'.
Mühasibat ledger (upsert + versiyası) yayılması zamanı Exactly-once effekti.
Marketinq/Reklam
Sliding pəncərə CTR/dönüşüm, Join klikləri və '± Δ t' tolerantlığı ilə nümayişlər, biddinq üçün yığma.
iGaming/onlayn xidmətlər
Real-time balans/limitləri, missiyalar/açivka (session pəncərə), anti-pattern və xəbərdarlıq.
Mini şablonlar (psevdokod)
Su işarələri və late yeniləmələri olan pəncərə
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)
Ofset fiksasiyası ilə əməliyyat sink
pseudo begin tx upsert target_table using event, key=(k)
update consumer_offsets set pos=:pos where consumer=:c commit
Production çek siyahısı
- Müəyyən hadisə vaxt və watermark strategiyası; və 'allowed _ lateness' pəncərələri seçilmişdir.
- Idempotent sink və ya ofset ilə əməliyyat kommit.
- Sxemlərin reyestri və uyğunluq rejimləri daxildir; əlavə təkamül.
- Metriklər: lag, watermark, p95/p99, DLQ, state ölçüsü, checkpoint müddəti.
- Testlər: out-of-order, təkrarlamalar, yenidən başlamalar, replay.
- state və snapshots üçün PII/Retance siyasəti.
- Ölçü planı və backpressure strategiyaları.
- Pəncərə müqavilələri və düzəlişlər sənədləşdirilməsi (late updates).
FAQ
Event time tələb olunur?
Metriklərin düzgünlüyü və uyğunluğu vacibdir, bəli. Processing time texniki hesablar/monitorinq üçün uyğundur, lakin analitikanı təhrif edir.
exactly-once lazımdır?
Dəqiq: kritik effektlər üçün. Daha çox at-least-once + idempotent sink kifayətdir.
Pəncərələri necə seçmək olar?
Biznes SLA-dan başlayın: «son 5 dəqiqədə» → hopping, «istifadəçi sessiyaları» → session, «dəqiqə hesabatları» → tumbling.
Gec məlumatlarla nə etmək lazımdır?
Məhdud 'allowed _ lateness' və düzəlişləri (upsert/retract) buraxmağa icazə ver. Müştəri vitrini yenilənməlidir.
Yekun
Axın emalı yalnız aşağı gecikmə deyil, həm də zaman, vəziyyət və müqavilələrin intizamıdır. Doğru hadisə vaxtı, pəncərələr və su işarələri seçimi, üstəgəl idempotent effektləri, müşahidə və testlər konveyeri etibarlı, təkrarlanabilir və qənaətcil edir - və biznesə «gecə» deyil, «burada və indi» həllərini verir.