Trăim într-o lume guvernată de date care cresc exponențial cu fiecare an. Nu e de mirare faptul că auzim tot mai des despre "tehnologii Big Data". Dacă la început, ecosistemul Big Data a fost doar o colecție de unelte menite să ne ajute să gestionam volumul de date, acum, trebuie să ia în considerare și problema vitezei.
Cum totul se întâmplă așa de repede în jurul nostru și deciziile bazate pe date sunt luate pe loc, procesarea evenimentelor în timp real începe să dețină un rol central în lumea Big Data.
Articolul vizează câteva opțiuni de creare a unui astfel de sistem, capabile de a colecta și de a procesa fluxul de date în timp real.
În primul rând, trebuie să stabilim exact ce înseamnă procesarea în timp real. Procesarea în timp real este un termen folosit pentru un sistem care preia date și face ceva semnificativ cu ele, într-un interval de timp fix și scurt. Când vorbim despre timp real, uneori ne referim și la procesare în timp aproape real. Ce înseamnă aceasta? Definiția indică o mică întârziere între timpul când a avut loc acțiunea și când e tratată. Această mică întârziere este uneori în termeni de milisecunde sau secunde care în cele mai multe cazuri poate fi considerată instant. Această viteză mare este ceea ce definește sistemele de procesare în timp real.
Pentru ca tot sistemul să funcționeze, trebuie să existe trei etape bine definite: crearea datelor, colectarea și procesarea.
Ce date sunt colectate? Totul. Suntem înconjurați de dispozitive conectate care trimit date la un sistem care le preia și întreprinde acțiuni inteligente sau pur și simplu creează niște rapoarte ca să înțeleagă mai bine tot sistemul. Din 2013 încoace, mai multe date au fost create decât în întreaga istorie a omenirii [1]. De la click-uri, la acțiunea utilizatorilor pe un site, la mașina, trasee GPS la comportamentul animalelor și la senzorii orașelor și nu doar, datele sunt colectate. Diverse companii au realizat valoarea datelor și au decis să le capteze.
Ce presupune procesarea în timp real? După ce datele sunt colectate prin intermediul unor instrumente de colectare a datelor, acestea sunt ulterior folosite pentru analiza. De multe ori, procesarea trebuie să se întâmple rapid astfel ca sistemul să reacționeze la schimbarea condițiilor. Acestea sunt necesare pentru optimizări în cadrul site-urilor, afișarea reclamelor, detectarea fraudelor, monitorizarea sistemelor și multe altele.
Reacția rapidă la fluxul de date nu este fezabilă cu bazele de date tradiționale. Din fericire, există multe framework-uri optimizate pentru timp real sau aproape real, bazate pe capacitățile oferite de Hadoop și ecosistemul Hadoop.
Acțiunile utilizatorilor și datele de la senzori sunt colectate și adesea sunt trimise direct la un server sau la un sistem cu o coadă de mesaje. Datele pot fi trimise în timp real sau colectate în grupuri.
Cu fluxul de date, fiecare eveniment este capturat în momentul în care este produs de către clientul sursă. În modul de colectare în grupuri, datele sunt stocate și trimise ca loturi mici conținând toate evenimentele care au avut loc în intervalul respectiv de timp.
Există două opțiuni de a procura datele: clientul poate avea incorporat o bucată de cod care trimite evenimentele sau clientul loghează în mod pasiv evenimentele și sistemul de procesare identifică datele noi, urmând ca apoi, folosind instrumente de colectare să preia informațiile noi.
Mai multe instrumente de colectare facilitează procesul. Câteva dintre acestea sunt:
Apache NiFi
Apache Flume
Amazon Kinesis
Apache NiFi este un proiect care atrage tot mai multă atenție în lumea Hadoop. Este un instrument multilateral care ne poate ajuta la colectarea datelor și la manipularea lor, folosind diverse surse de date. Este o resursă excelentă pentru colectarea fluxului de date în timp real, pentru filtrarea lor la nevoie și de asemenea poate funcționa ca un mesager și trimite datele la locurile dorite.
Figura 2 - Un exemplu de flux NiFi folosind diverse procesoare
NiFi poate fi instalat în multe moduri, de la dispozitive foarte simple cu conectare la internet până la un cluster de mașini, în cazul unor sarcini mai complexe sau care necesită mai multe resurse. După instalare, va oferi o interfață web unde utilizatorul poate defini o serie de pași.
Fiecare pas este deservit de ceea ce NiFi numește "processors". Exista peste 180 astfel de processors care sunt ușor de configurat pentru a capta, a transforma și a transmite date. Pe scurt, NiFi a fost proiectat pentru a automatiza fluxul de date, fie că citește informații folosind HTTP, accesează fișiere expuse prin FTP, tweeturi în timp real și multe altele, urmând ca apoi să le parseze, să le transforme și să salveze datele.
Flume este un alt proiect susținut de Apache care este proiectat pentru colectarea eficientă și mutarea unui volum mare de date. Bazat pe arhitectura fluxului de date continuu, este un candidat potrivit pentru colectarea datelor în timp real.
În topul instrumentelor folosite pentru a realiza un sistem de procesare în timp real este Apache Kafka. Kafka a fost proiectat a fi o platformă distribuită pentru fluxul de date, care funcționează ca un agent ce gestionează o coadă de mesaje. Kafka oferă un management "high-throughput, low-latency" pentru feedul de date. Ne permite să stocăm într-un fel tolerant la erori și să procesăm datele pe măsură ce se întâmplă.
Kafka oferă mulți producători cât și consumatori pentru fluxul de date. Posibilitatea abonării la evenimentele în timp real fac Kafka un candidat potrivit pentru un pipeline cu latență mică.
În ultimii ani, procesarea în timp real a preluat un rol central în ținutul Big Data. Mai multe platforme puternice și open-source au fost create pentru a facilita aceasta. Trei dintre cele mai notabile platforme sunt Apache Storm, Apache Spark cu Spark Streaming și Apache Flink.
Apache Storm a devenit un proiect de top Apache în septembrie 2014. Storm este proiectat pentru a gestiona datele în timp real cât mai bine posibil. Arhitectura sa este bazată pe conectarea de spout-uri pentru flux de intrare și bolturi pentru procesare și output. Spouts și bots împreună formează ceea ce este numit o topologie.
O dată ce o topologie este pornită, spouturile aduc datele în sistem și le predă la bolturi. Această arhitectură face Storm adecvat pentru procesarea fluxului de date. Există multe spouturi de intrare pentru diverse surse de la Apache Kafka, Twitter Streaming API și multe altele sau ne putem defini propriul spout.
Apache Spark a fost creat de Matei Zaharia, născut în România. În timpul studiilor de doctorat, la UC Berkeley a început proiectul Spark. Ulterior, a donat codul la Apache Software Foundation, care a menținut Spark de atunci. De la release-ul inițial în 2014 ca un proiect de top Apache, Spark a evoluat constant, cu mai mult de 1000 contribuitori la proiectul său open-source.
Unul dintre beneficiile oferite de Spark este numărul de module diferite pe care le are:
Spark Core - folosit pentru procesare batch
Spark Streaming- pentru flux de date în timp real
Spark SQL - pentru interogări SQL
Spark ML - pentru machine learning
Spark Streaming, similar cu Storm a fost proiectat pentru o scalabilitate masivă și oferă mijloacele de procesare în timp real a unui volum mare de date.
Diferența principală dintre Spark si Storm este dată de faptul că Storm reacționează imediat la o schimbare de date, în timp ce modelul Spark folosește noțiunea de procesare micro-batch. Aceasta înseamna că procesează evenimentele în timp aproape real. În loc să proceseze fluxul de date, câte un element pe rând, Spark acceptă datele în paralel și le stochează în memoria nodurilor din clusterul Spark. Procesarea are loc pe micro-batch-uri, într-o fereastră de timp cum este definită în configurările din jobul de Spark.
Dacă începem un proiect despre care știm că va trata doar fluxul de date în timp real al evenimentelor și latența este foarte importantă, varianta mai potrivită ar fi Storm.
Pe de altă parte, dacă avem deja un cluster Hadoop sau Mesos și proiectul este mai complex, implicând și machine learning, query-uri SQL sau procesare de grafuri, atunci Spark ar fi mai convenabil. De asemenea, pentru Spark, echipa ar putea avea deja experiența procesărilor batch folosind Spark Core. Spark Streaming este foarte similar cu Spark Core, având aceleași concepte de RDD(Resilient Distributed Datasets) din Spark, singura diferența dintre un job de streaming și unul de batch este inițializarea, în timp ce toate celelalte concepte rămân la fel.
Apache Flink este un alt framework de procesare Big Data, care a început și el ca un proiect de cercetare. În iunie 2015, Flink a avut prima lansare ca un proiect Apache de top. În ultimele luni, a început să capteze atenția multor programatori Big Data.
În timp ce Spark gestionează datele în micro-batch-uri, Flink este proiectat să proceseze fluxul de date în timp real. Motorul de execuție Flink este similar cu cel al Stormului pentru procesarea fluxului de date, dar oferă și posibilitatea procesării cu ușurință în mod batch, o funcționalitate care lipsește din Storm.
Dezavantajul la Flink este faptul că fiind mai recent, este încă în consolidare și nu are deocamdată aceeași rată de adopție ca și Spark sau Storm. Totuși este un instrument cu potențial de a evolua foarte mult.
Volumul de date crește rapid și cererea pentru procesarea fluxului de date în timp real crește de asemenea. Există multe instrumente puternice plătite sau open-source, frameworkuri și platforme care țin cont de această nevoie. Toate progresează constant, facilitând dezvoltarea de sisteme de procesare în timp real. Putem prezice o adopție largă a acestor tehnologii de către multe companii care intră în lumea Big Data.
de Paul Suciu
de Bogdan Bucur