Optimizați punctele de control în Amazon Managed Service pentru aplicațiile Apache Flink cu deblocarea tamponului și puncte de control nealiniate – Partea 2 | Amazon Web Services

Optimizați punctele de control în Amazon Managed Service pentru aplicațiile Apache Flink cu deblocarea tamponului și puncte de control nealiniate – Partea 2 | Amazon Web Services

Nodul sursă: 2271050

Această postare este o continuare a unei serii în două părți. În Prima parte, ne-am aprofundat Apache FlashMecanismele interne ale lui pentru puncte de control, tamponarea datelor în timpul zborului și gestionarea contrapresiunii. Am acoperit aceste concepte pentru a înțelege cum deblocarea tamponului și punctele de control nealiniate ne permit să îmbunătățim performanța pentru condiții specifice în aplicațiile Apache Flink.

In Partea 1, am introdus și am examinat cum să folosim deblocarea tamponului pentru a îmbunătăți procesarea datelor în timpul zborului. În această postare, ne concentrăm pe punctele de control nealiniate. Această caracteristică este disponibilă începând cu Apache Flink 1.11 și a primit multe îmbunătățiri de atunci. Punctele de control nealiniate ajută, în condiții specifice, la reducerea timpului de trecere a punctelor de control pentru aplicațiile care suferă de contrapresiune temporară și poate fi acum activat in Serviciul gestionat Amazon pentru Apache Flink aplicații care rulează Apache Flink 1.15.2 prin a bilet de sprijin.

Chiar dacă această caracteristică ar putea îmbunătăți performanța punctelor dvs. de control, dacă aplicația dvs. eșuează în mod constant din cauza expirării punctelor de control sau suferă din cauza contrapresiunii constante, este posibil să aveți nevoie de o analiză mai profundă și o reproiectare a aplicației.

Puncte de control aliniate

Așa cum am discutat în Partea 1, Punctul de control Apache Flink permite aplicațiilor să înregistreze starea în caz de eșec. Am discutat deja despre modul în care punctele de control, atunci când sunt declanșate de managerul de locuri de muncă, semnalează tuturor operatorilor sursă să-și imagineze starea, care este apoi difuzată ca o înregistrare specială numită bariera punctului de control. Acest proces realizează o consistență exactă o dată pentru stare într-o aplicație de streaming distribuită prin alinierea acestor bariere.

Să parcurgem procesul de aliniere a punctelor de control într-o aplicație standard Apache Flink. Amintiți-vă că Apache Flink distribuie volumul de lucru pe orizontală: fiecare operator (un nod din fluxul logic al aplicației dvs., inclusiv sursele și receptorii) este împărțit în mai multe sub-sarcini pe baza paralelismului său.

Alinierea barierei

Alinierea barierelor punctelor de control este crucială pentru a obține o consistență exactă o singură dată în aplicațiile Apache Flink în timpul rulării punctelor de control. Pentru a recapitula, atunci când un manager de job declanșează un punct de control, toate sarcinile secundare ale operatorilor sursă primesc un semnal pentru a iniția procesul punctului de control. Fiecare subsarcină își face instantanee în mod independent stării către backend-ul de stat și difuzează o înregistrare specială cunoscută sub numele de barieră punct de control pentru toate fluxurile de ieșire.

Când o aplicație funcționează cu un paralelism mai mare de 1, mai multe instanțe ale fiecărei sarcini - denumite ca sub-sarcini—permite consumul și procesarea mesajelor paralele. O subsarcină poate primi partiții distincte ale aceluiași flux de la diferite subsarcini din amonte, cum ar fi după repartiționarea unui flux cu keyBy or rebalance operațiuni. Pentru a menține consistența exactă o dată, toate sarcinile secundare trebuie să aștepte sosirea tuturor barierelor punctelor de control înainte de a face un instantaneu al stării. Următoarea diagramă ilustrează fluxul barierelor punctului de control.

Punctul de control Barierele curg în cozile tampon

Această fază se numește alinierea punctului de control. În timpul alinierii, subsarcina oprește procesarea înregistrărilor de la partițiile de la care a primit deja bariere, așa cum se arată în figura următoare.

Prima barieră ajunge la subsarcina: începe alinierea punctelor de control

Cu toate acestea, continuă să proceseze partițiile care se află în spatele barierei.

Procesarea continuă numai pentru partițiile din spatele barierei

Când barierele din toate partițiile din amonte au sosit, sub-sarcina face o imagine instantanee a stării sale.

Alinierea barierei finalizată: stare instantanee

Apoi difuzează bariera în aval.

Emiteți bariere în aval și continuați procesarea

Timpul pe care îl petrece o subsarcină așteptând sosirea tuturor barierelor este măsurat de metrica Durata alinierii punctului de control, care poate fi observată în interfața de utilizare Apache Flink.

Dacă aplicația se confruntă cu contrapresiune, o creștere a acestei valori ar putea duce la durate mai lungi ale punctelor de control și chiar la eșecuri ale punctelor de control din cauza timeout-urilor. Aici punctele de control nealiniate devin o opțiune viabilă pentru a îmbunătăți potențial performanța punctelor de control.

Puncte de control nealiniate

Punctele de control nealiniate se adresează situațiilor în care contrapresiunea nu este doar o creștere temporară, ci are ca rezultat expirarea timpului pentru punctele de control aliniate, din cauza stării de așteptare a barierelor din flux. După cum sa discutat în partea 1, barierele punctelor de control nu pot depăși înregistrările obișnuite. Prin urmare, contrapresiunea semnificativă poate încetini mișcarea barierelor în cadrul aplicației, provocând potențial timeout-uri ale punctelor de control.

Obiectivul punctelor de control nealiniate este de a permite depășirea barierelor, permițând barierelor să se deplaseze rapid de la sursă la scufundare chiar și atunci când fluxul de date este mai lent decât se anticipa.

Bazându-ne pe ceea ce am văzut în partea 1 cu privire la punctele de control și ce sunt punctele de control aliniate, haideți să explorăm modul în care punctele de control nealiniate modifică mecanismul de control.

La emisie, bariera punctului de control a fiecărei surse este injectată în fluxul care curge prin sub-sarcini. Acesta călătorește de la coada de buffer de rețea de ieșire sursă în coada de tampon de rețea de intrare a operatorului următor.

La sosirea primei bariere în coada de memorie tampon a rețelei de intrare, operatorul așteaptă inițial alinierea barierei. Dacă expirarea timpului de aliniere specificat expiră deoarece nu toate barierele au ajuns la sfârșitul cozii tampon de intrare în rețea, operatorul trece la modul punct de control nealiniat.

Timeout-ul de aliniere poate fi setat programatic de env.getCheckpointConfig().setAlignedCheckpointTimeout(Duration.ofSeconds(30)), dar modificarea valorii implicite nu este recomandată în Apache Flink 1.15.

Barierele punctelor de control curg în cozile tampon

Operatorul așteaptă până când toate barierele punctelor de control sunt prezente în coada tampon de intrare în rețea înainte de a declanșa punctul de control. Spre deosebire de punctele de control aliniate, operatorul nu trebuie să aștepte ca toate barierele să ajungă la sfârșitul cozii, permițându-i operatorului să aibă date din timpul zborului din buffer care nu au fost procesate înainte de inițierea punctului de control.

Toate barierele sunt în cozile de intrare

După ce toate barierele au ajuns în coada de buffer de intrare în rețea, operatorul avansează bariera până la sfârșitul cozii de buffer rețea de ieșire. Acest lucru îmbunătățește viteza de verificare, deoarece bariera poate traversa fără probleme aplicația de la sursă la receptor, independent de latența de la capăt la capăt a aplicației.

Barierele pot depăși mesajele din zbor

După redirecționarea barierei către coada de buffer a rețelei de ieșire, operatorul inițiază instantaneul datelor din zbor între barierele din cozile de buffer de rețea de intrare și de ieșire, împreună cu instantaneul stării.

Deși procesarea este momentan întreruptă în timpul acestui proces, scrierea efectivă în stocarea stării persistente la distanță are loc asincron, prevenind potențiale blocaje.

Stare instantanee și mesaje în timpul zborului

Instantaneul local, care cuprinde mesajele și starea în timpul zborului, este salvat în mod asincron în depozitul de stări persistente la distanță, în timp ce bariera își continuă călătoria prin aplicație.

Procesarea continuă

Când să folosiți puncte de control nealiniate

Amintiți-vă, alinierea barierei are loc numai între partițiile care provin de la diferite sub-sarcini ale aceluiași operator. Prin urmare, dacă un operator se confruntă cu o contrapresiune temporară, activarea punctelor de control nealiniate poate fi benefică. În acest fel, aplicația nu trebuie să aștepte ca toate barierele să ajungă la operator înainte de a efectua instantaneul stării sau de a muta bariera înainte.

Contrapresiunea temporară poate apărea din următoarele:

  • O creștere a ingerării de date
  • Completarea sau recuperarea datelor istorice
  • Timp de procesare a mesajelor crescut din cauza sistemelor externe întârziate

Un alt scenariu în care punctele de control nealiniate se dovedesc avantajoase este atunci când lucrați cu chiuvete exact o dată. Folosind funcția de colectare de comitere în două faze pentru chiuvetele exact o dată, punctele de control nealiniate pot accelera rulările punctelor de control, reducând astfel latența de la un capăt la altul.

Când să nu folosiți puncte de control nealiniate

Punctele de control nealiniate nu vor reduce timpul necesar pentru puncte de salvare (numite instantanee în implementarea Amazon Managed Service pentru Apache Flink), deoarece punctele de salvare utilizează exclusiv puncte de control aliniate. În plus, deoarece Apache Flink nu permite puncte de control nealiniate concurente, punctele de salvare nu vor avea loc simultan cu punctele de control nealiniate, potențial prelungind durata punctelor de salvare.

Punctele de control nealiniate nu vor rezolva nicio problemă de bază în proiectarea aplicației dvs. Dacă aplicația dvs. suferă de contrapresiune persistentă sau de timeout-uri constante ale punctelor de control, acest lucru poate indica asimetrie sau aprovizionare insuficientă a datelor, ceea ce poate necesita îmbunătățirea și reglarea aplicației.

Utilizarea punctelor de control nealiniate cu deblocarea tamponului

O alternativă pentru reducerea riscurilor asociate cu o dimensiune crescută a stării este combinarea punctelor de control nealiniate cu deblocarea tamponului. Această abordare are ca rezultat mai puține date în timpul zborului pentru a capta și stoca în stare, împreună cu mai puține date pentru a fi utilizate pentru recuperare în caz de eșec. Această sinergie facilitează performanțe îmbunătățite și rulări eficiente ale punctelor de control, ceea ce duce la dimensiuni mai mici ale punctelor de control și timpi de recuperare mai rapidi. Când testați utilizarea punctelor de control nealiniate, vă recomandăm să faceți acest lucru cu deblocarea tamponului pentru a preveni creșterea dimensiunii stării.

Limitări

Punctele de control nealiniate sunt supuse următoarelor limitări:

  • Nu oferă niciun beneficiu operatorilor cu un paralelism de 1.
  • Ele îmbunătățesc doar performanța operatorilor unde ar fi avut loc alinierea barierei. Această aliniere are loc numai dacă înregistrările provin de la diferite sub-sarcini ale aceluiași operator, de exemplu, prin repartiționare sau keyBy operațiuni.
  • Este posibil ca operatorii care primesc intrări din mai multe surse sau care participă la alăturari să nu experimenteze îmbunătățiri, deoarece operatorul ar primi date de la diferiți operatori în acele cazuri.
  • Deși barierele punctelor de control pot depăși înregistrările din coada tampon a rețelei, acest lucru nu se va întâmpla dacă sarcina secundară procesează în prezent un mesaj. Dacă procesarea unui mesaj durează prea mult timp (de exemplu, o operațiune cu hartă plană care emite numeroase înregistrări pentru fiecare înregistrare de intrare), gestionarea barierei va fi întârziată.
  • După cum am văzut, punctele de salvare folosesc întotdeauna puncte de control aliniate. Dacă punctele de salvare ale aplicațiilor dvs. sunt lente din cauza alinierii barierei, punctele de control nealiniate nu vor ajuta.
  • Limitări suplimentare afectează filigranele, ordinea mesajelor și starea de difuzare în recuperare. Pentru mai multe detalii, consultați Limitări.

Considerații

Considerații pentru implementarea punctelor de control nealiniate:

  • Punctele de control nealiniate introduc I/O suplimentare pentru stocarea punctului de control
  • Punctele de control cuprind nu numai starea operatorului, ci și datele din timpul zborului din cozile tampon ale rețelei, ceea ce duce la creșterea dimensiunii stării

Recomandări

Oferim urmatoarele recomandari:

  • Luați în considerare activarea punctelor de control nealiniate numai dacă sunt adevărate ambele condiții următoare:
  • Punctele de control expiră.
  • Durata medie de asincronizare a punctului de control a oricărui operator este mai mare de 50% din durata totală a punctului de control pentru operator (suma Durata de sincronizare + Durata de asincronizare).
  • Luați în considerare mai întâi activarea deblocării tampon și evaluați dacă rezolvă problema expirării punctelor de control.
  • Dacă deblocarea tamponului nu ajută, luați în considerare activarea punctelor de control nealiniate împreună cu deblocarea tamponului. Deblocarea tamponului atenuează dezavantajele punctelor de control nealiniate, reducând cantitatea de date în timpul zborului.
  • Dacă punctele de control nealiniate și deblocarea tamponului împreună nu îmbunătățesc durata alinierii punctelor de control, luați în considerare testarea punctelor de control nealiniate singur.

Fluxul decizional

În cele din urmă, dar cel mai important, testați întotdeauna punctele de control nealiniate într-un mediu care nu este de producție, executând unele teste de performanță comparative cu o sarcină de lucru realistă și verificați dacă punctele de control nealiniate reduc de fapt durata punctului de control.

Concluzie

Această serie din două părți a explorat strategii avansate pentru optimizarea punctelor de control în cadrul aplicațiilor Amazon Managed Service pentru Apache Flink. Valorificând potențialul deblocării tamponului și al punctelor de control nealiniate, puteți debloca îmbunătățiri semnificative ale performanței și puteți eficientiza procesele punctelor de control. Cu toate acestea, este important să înțelegeți când aceste tehnici vor oferi îmbunătățiri și când nu. Dacă credeți că aplicația dvs. poate beneficia de îmbunătățirea performanței punctului de control, puteți activați aceste funcții în serviciul dvs. gestionat Amazon pentru Apache Flink aplicații versiunea 1.15. Vă recomandăm mai întâi să activați deblocarea tamponului și să testați aplicația. Dacă încă nu vedeți rezultatul așteptat, activați deblocarea tamponului cu puncte de control nealiniate. În acest fel, puteți reduce imediat dimensiunea stării și I/O-ul suplimentar pentru backend-urile de stat. În cele din urmă, puteți încerca să utilizați puncte de control nealiniate de la sine, ținând cont de considerentele pe care le-am menționat.

Cu o înțelegere mai profundă a acestor tehnici și aplicabilitatea lor, sunteți mai bine echipat pentru a maximiza eficiența punctelor de control și a atenua efectul contrapresiunii în aplicația dvs. Apache Flink.


Despre Autori

Lorenzo NicoraLorenzo Nicora lucrează ca arhitect senior de soluții de streaming, ajutând clienții din EMEA. De peste 25 de ani construiește sisteme cloud-native, intensive în date, lucrând în industria financiară atât prin consultanță, cât și pentru companii de produse FinTech. El a valorificat pe scară largă tehnologiile open-source și a contribuit la mai multe proiecte, inclusiv Apache Flink.

Francisco MorilloFrancisco Morillo este arhitect de soluții de streaming la AWS. Francisco lucrează cu clienții AWS, ajutându-i să proiecteze arhitecturi de analiză în timp real folosind serviciile AWS, susținând Amazon Managed Streaming pentru Apache Kafka (Amazon MSK) și oferta gestionată de AWS pentru Apache Flink.

Timestamp-ul:

Mai mult de la AWS Big Data