Ջրհեղեղի վերամշակում
Ի՞ նչ է հոսքի վերամշակում
Հոսքային բուժումը շարունակական արձագանք է իրադարձությունների անվերջ հաջորդականությունների վրա (գործարքների, տեսահոլովակների, վճարումների, հեռաչափության), նվազագույն ուշացումով և պետությունների ճիշտ ուղղություններով։ Ի տարբերություն մարտից, որտեղ «վերցնում ենք բոլոր կուտակված ժամանակահատվածները», հոսքը մշակում է տվյալները հասանելիությամբ, աջակցում է վիճակը և հաշվի է առնում իրադարձության ժամանակը։
Հիմնական հասկացությունները
Իրադարձությունը (event) անփոփոխ փաստ է '«event _ time» և եզակի «event _ id»։
Իրադարձության ժամանակը (event time) vs-ը (processing Time) առաջինն է գալիս աղբյուրից, երկրորդը 'երբ օպերատորը իսկապես տեսավ իրադարձությունը։
Պատուհանները (windows) ժամանակի իրադարձությունների խումբ են
Tumbling (չբացահայտված), Hopping/Sliding (արգելափակումով), Session (բացթողումներ)։
Հիբրիդային նշանները (watermarks) գնահատում են, որ «իրադարձությունները մինչև T պահը արդեն եկել են», որը թույլ է տալիս փակել պատուհանները և սահմանափակել ուշացած տվյալների սպասումը։
Վճարող տվյալները (lateness) - իրադարձություններ '«event _ time» -ի հետ ավելի քիչ, քան ներկայիս watermark; հաճախ օգտագործվում են վերամշակման կանոնները։
Վիճակը (state) տեղական սեղաններ/ռուսական օպերատորներ (keyed state) ագրեգատների, join's, dedupliation համար։
Backpressure-ը ճնշում է, երբ ավելանում է downstream աշխատանքային կարողությունը։ կառավարվում է ձեռնարկությունների և բուֆերների կողմից։
Ճարտարապետական հիմքերը
1. Աղբյուրը (source) 'իրադարձությունների բրոքեր (Kafka/NATS/Pulsar), CDC-ից BD, գծեր, ֆայլեր/log-կոլեկտորներ։
2. Հոսքի շարժիչը 'հաշվարկում է պատուհանները, ագրեգատները, ջոյները, փամփուշտները (CEP), կառավարում է վիճակը և լուծումը kpoint' ami։
3. Ընդունիչ (sink) ՝ OLTP/OLAP BD, որոնման շարժիչ, քեշը, կացինները, որոնք նախատեսված են վիտրինի համար/2019։
4. Սխեմաների իրականացումը 'payload և international էվոլյուցիայի վերահսկումը։
5. Դիտարկումը 'չափումներ, թրեյսինգ, լոգներ, տախտակամածներ և ստացիոնար նշաններ։
Ժամանակի և կարգի սեմանտիկան
Միշտ նախընտրեք event time: Սա միակ ինվարանտն է հետաձգման և ընդհատումների ժամանակ։
Իրադարձությունները կարող են գալ կարգից դուրս։ կարգը երաշխավորված է միայն կուսակցության ստեղում։
Watermarks թույլ են տալիս
փակել պատուհանները և նվազեցնել արդյունքները։
սահմանափակել «ինչքա՞ ն ենք սպասում» ազդանշանային իրադարձությունները («allowed _ lateness»)։
Ուշացած իրադարձությունների համար օգտագործեք retractions/upser.ru 'միավորների վերահաշվարկ և ուղղիչ իրադարձություններ։
Վիճակը և կայունությունը
Keyed state: ագրեգատների տվյալները (գումարներ, հաշվիչներ, դեդուպի կառուցվածքներ) շարդինգը բաշխվում է բեկորներով։
Nokpoint/Savepoint: Վերականգնման վիճակի պարբերական նկարները։ savepoint-ը կոդի տարբերակի կոդավորման համար կառավարվող նկար է։
Exactly-once-ի էֆեկտը հասնում է
գործարքային «կարդացի-վերամշակել» (commit sink + ընթերցանության դիրք);
idotental sinks (ups.ru/merge) + dedup աղյուսակներ;
ագրեգատների տարբերակը (optimistic concurrency)։
Պատուհաններ, ագրեգացիաներ, join 'a
Պատուհաններ
Tumbling: Պարզ պարբերական հաշվետվություններ (րոպե, ժամ)։
Hopping/Sliding: «սայթաքող» մետրիկները (5 րոպե տևողությամբ 1 րոպե)։
Session 'բնական է օգտագործողների նստաշրջանների և հակաֆրոդի համար։
Aggregations: sum/count/avg/approx-distinct (HyperLogLog), percentiles (TDigest/CKMS).
Stream-Stream join-ը պահանջում է երկու կողմերի բուֆերիզացիա բանալիով և ժամանակով, հարգեք «allowed _ skew»։
Stream-Table Join (KTable) 'գրողի կամ ներկա վիճակի միացումը (օրինակ ՝ «օգտագործողի ակտիվ սահմանները»)։
ազդանշանային և կրկնվող տվյալների հետ աշխատելը
Deduplication: event _ id 'կամ' (wwww.er _ id, sequence); պահեք «տեսանելի» բանալիները TTL-ից նկարի պատուհանները։
Late events: Թույլ տվեք պատուհանների վերամշակումը «X» ընթացքում փակվելուց հետո (retractions/upser.ru)։
Կեղծ կրկնօրինակներ 'ուղղեք ագրեգատները և ամրագրեք «ALREADY _ APIED» լոգարաններում։
Մեծացումը և արտադրողականությունը
Շարդինգը բանալին 'տալիս է զուգահեռ։ հետևեք «տաք» բաներին։
Backpressure: Սահմանափակեք զուգահեռությունը, օգտագործեք մարտեր և ագրեսիա հրապարակելիս։
Հիբրիդային նշաններ, շատ ագրեսիվ, կոշտ watermarks նվազեցնում են սպասումը, բայց բարձրացնում են late-2019 մասնաբաժինը։
Վիճակը 'ընտրեք ձևաչափը (Rocult DB/state store/հիշողության մեջ) հաշվի առնելով հասանելիության չափն ու պաթոգենները։ մաքրեք TTL-ը։
Ավտոմոբիլացումը 'լագա, CPU, state չափսը, GC ժամանակը։
Մոսկվան և վերագործարկումը
Idempotent sink-ը կամ գործարքային համայնքը օֆսետի ամրագրման հետ ճիշտ հիմքն է։
Վերագործարկումից հետո կրկնվող վերամշակում։ էֆեկտը պետք է մնա «հենց մեկ անգամ»։
DLQ/parking lot: ուղարկեք խնդրահարույց գրառումներ առանձին հոսքի պատճառներով։ ապահովեք վերամշակումը։
Դիտարկումը (ինչ չափել)
Lag-ը աղբյուրներով (ժամանակ և հաղորդագրությամբ)։
Watermark/current event Time-ը և late-իրադարձությունների մասը։
Throughput/latency օպերատորներ, p95/p99 end-to-end։
State size/rocksdb I/O, www.kpoint 's/տևողությունը։
DLQ rate, deduplication/retrav տոկոսը։
CPU/GC/heap, դադարի ժամանակը։
Անվտանգություն և ընկերակցություն
Տվյալների դասակարգումը 'PII/PCI փակցրեք սխեմաներում, պահեք նվազագույն, ծածկագրեք state և կճեպներ։
Corporl: անհատական ACL-ը տեղանունների/աղյուսակի վրա և sinks-ում։
Ռենտենցիա. Համաձայն են իրավաբանական ինստիտուտների հետ (GDPR/մոռացման իրավունք)։
Աուդիտ 'լոգո _ event _ id', «trace _ id», արդյունքը ՝ «APPIED/ALREADY _ APPIED/RETRIED»։
Ներդրման արտոնագրեր
1. CDC-ն բացատրում է տիրույթի իրադարձությունների նորմալացումը. Մի հեռարձակել BD-ի հում փոփոխությունները, դիմեք հասկանալի բիզնես փաստերին։
2. Disbox-ը արտադրողների մոտ 'գործարքի փաստը + իրադարձությունը մեկ BD գործարքում է։
3. Divs Enriched: նվազագույն payload կրիտիկական հոսքում, հարստացումը ասինխրոնո է։
4. Replay-բարեկամություն 'պրոյեկցիաները/վիտրինները պետք է վերածվեն հատակին։
5. Idempotency by design: operation/event key, upsoft-սխեմաները, ագրեգատների տարբերակները։
Փորձարկումներ
Unit/Property-based 'ագրեգատների և վերափոխումների ինվարանտներ։
Stream tes.ru: Ֆիքսված իրադարձությունների հոսքը out-of-order-ով և կրկնօրինակիչներով բացատրվում է պատուհանների և պապի ստուգումը։
Golden windows: Ստանդարտ պատուհաններ/ագրեգատներ և ընդունելի ուշ շարժիչներ։
Fox-inject-ը '«գրեց էֆեկտը» և «օֆսեթը»։
Replay tes.ru: վիտրինի փոխանակումը լոգոյի սկզբից = ներկա վիճակ։
Արժեքը և օպտիմիզացումը
Պատուհանները և watermark ազդում են/ռեսուրսների վրա, որքան ավելի երկար է պատուհանը և ավելի շատ «allowed _ lateness», այնքան ավելի շատ state։
Ֆորումը և թեմը 'հավասարակշռեք CPU/ցանցը։
Batching ելքի վրա 'ավելի քիչ ցանցային զանգեր և գործարքներ։
Ֆիլտրը վաղ է («pushdown») 'հեռացրեք ավելիին հնարավորինս մոտ աղբյուրին։
Antipatterny
Processing Time-ում, որտեղ անհրաժեշտ է event Time-ը սխալ վերլուծություն է։
Idempotenty բացակայությունը sink-ում կրկնակի ազդեցություն է ունենում ռեստարտների վրա։
Համաշխարհային «մեգա-բանալիներ» 'մի տաք բաժին կոտրում է զուգահեռականությունը։
Հում CDC-ն որպես հանրային իրադարձություններ 'BD սխեմաների արտահոսք, էվոլյուցիայի ժամանակ փխրունություն։
Ոչ DLQ: «թունավոր» հաղորդագրությունները արգելափակում են ամբողջ փոխակրիչը։
Ֆիքսված կոշտ ուշացում watermark-ի փոխարեն, կամ հավիտենական սպասումը կամ տվյալների կորուստը։
Օրինակների օրինակներ
Վճարումներ/ֆինանսներ
Հոսքը 'pay.ru: «, պատուհանները հակաֆրոդի համար (session + CEP), dedup' operation _ id»։
Exactly-once էֆեկտը հաշվապահական ledger (ups.ru + տարբերակը) բաժանելիս։
Մարքեթինգը/գովազդը
Sliding պատուհանը CTR/կոնվերսիա, Join clics և ցուցադրություններ '«www.Drt», բիդինգի համար։
iGaming/առցանց ծառայություններ
Real-taim հավասարակշռություն/limits, առաքելություններ/aviks (session պատուհան), հակաֆրոդ և նախազգուշացում։
Մինի ձևանմուշ (կեղծ)
Պատուհանը ստացիոնար նշաններով և late-նորարարություններով
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)
Գործարքային sink 'օֆսետի ամրագրմամբ
pseudo begin tx upsert target_table using event, key=(k)
update consumer_offsets set pos=:pos where consumer=:c commit
Chek-Lister վաճառվել է
- Որոշված է event time և ռազմավարություն watermark; ընտրվել են պատուհաններ և «allowed _ lateness»։
- Idempotent sink կամ գործարքային համայնքը օֆսետի հետ։
- Սխեմաները և ռեժիմները ներառված են. ադիտիվ էվոլյուցիա։
- Metriki: lag, watermark, p95/p99, DLQ, state չափսը, տևողությունը - kpoint։
- Թեստեր ՝ out-of-order, կրկնօրինակներ, վերագործարկումներ, replay։
- PII/retenties-ի քաղաքականությունը state-ի և դիպուկահարների համար։
- Մեծացման և ռազմավարության պլանը։
- Պատուհանների և օպտիմալացման ստանդարտները (late prodates)։
FAQ
Event time-ը պարտական է։
Եթե կարևոր է մետրի ճկունությունը և ներդաշնակությունը, այո։ Processing Time-ը հարմար է տեխնոլոգիական/մոնիտորինգի համար, բայց աղավաղում է վերլուծությունը։
Արդյո՞ ք անհրաժեշտ է exactly-once։
Կետն այն է, որ կրիտիկական էֆեկտների համար։ Հաճախ բավական է at-least-once + idempotent sink։
Ինչպե՞ ս ընտրել պատուհանները։
Հեռացեք բիզնես SLA-ից '«վերջին հինգ րոպեի ընթացքում» www.hopping, «օգտագործողի նստաշրջաններ» www.session, «րոպեանոց հաշվետվություններ» www.tumbling-ից։
Ի՞ նչ անել ուշ տվյալների հետ։
Թույլ տալ սահմանափակ «allowed _ lateness» և մեղմացնել (ups.ru/retract)։ Հաճախորդի վիտրինը պետք է կարողանա նորարարվել։
Արդյունքը
Ջրհեղեղի վերամշակումը ոչ միայն ցածր ձգձգում է, այլև ժամանակի կարգապահություն, վիճակ և կայունություն։ Event Time, պատուհանների և ստացիոնար նշանների ճիշտ ընտրությունը, գումարած idempotent էֆեկտները, դիտարկումը և թեստերը փոխակրիչը դարձնում են հուսալի, վերարտադրված և տնտեսական, և բիզնեսին տալիս են «այստեղ և հիմա» լուծումներ, և ոչ թե «գիշերվա ընթացքում»։