Articolul își propune să prezinte o serie de noțiuni generale referitoare la Kafka și la rolul pe care acest sistem îl joacă în ecosistemul BigData.
Domeniul BigData este tot mai popular, iar interesul pentru tehnologiile din acest ecosistem este unul în creștere. Una dintre cele mai mari provocări ale BigData este partea de analiză a datelor. Dar pentru a face față acestei provocări este important să ne centrăm atenția asupra modului cum reușim să colectăm aceste date? În ajutorul nostru intervine sistemul Apache Kafka.
Inițial dezvoltat de Linkedin, utilizările lui Apache Kafka includ consumul în timp real de date generate de aplicații, de website-uri sau de diverși senzori. Kafka se distinge ca fiind un proiect open-source de o foarte bună calitate, aspect care a atras foarte multă atenție și numeroși contributori. Dintre utilizatorii cei mai cunoscuți ai acestui sistem utilizatorii cei mai cunoscuți îi menționăm pe : Uber, Twitter, Netflix, Yahoo sau Cisco.
Apache Kafka este un sistem de tip pub-sub construit sub forma unui commit log distribuit.
Terminologia Kafka are următoarele caracteristici:
-Menține un flux de mesaje în categorii numite topicuri.
-Procesele care publică mesaje se numesc producători.
-Procesele cu o subscripție la aceste topicuri și care prelucrează mesajele care sunt publicate se numesc consumatori.
-Kafka rulează sub forma unui cluster format din mai multe servere numite brokeri.
O privire de ansamblu a arhitecturii poate fi exemplificată astfel:
Consensul general este că sistemele asemănătoare cu Apache Kafka fac parte din evoluția și diversificarea ecosistemului BigData. Brian Hopkins, vicepreședinte și analist principal la Forrester Research afirma: "Până în 2013, BigData era despre cantități mari de date stocate în sistemul Hadoop, dar acum, dacă nu faci încă acest lucru, ești în urma tendințelor."
Această declarație nu face altceva decât să reliefeze ceea ce deja devine tot mai evident. Colectarea datelor devine crucială pentru procesele analitice, iar multitudinea de sisteme care generează date, transformă această colectare într-o provocare. Kafka îți permite să muți cantități mari de date pe care le face disponibile sub forma unui flux de date celor care au nevoie de ele.
"Internetul lucrurilor" este unul dintre marii contributori când vine vorba de această cantitate uriașă de date care se generează. Este evident că această cantitate de date este într-o continuă creștere având în vedere că avem tot mai multe dispozitive conectate la internet. Pe măsură ce numărul senzorilor și dispozitivelor pe care le purtăm crește, vom avea nevoie să reușim să mutăm, să catalogăm și să analizăm cantități tot mai mari de date.
Până în 2014 vorbeam doar de Hadoop, apoi a apărut Spark, dar acum Kafka completează triada. Acestea formează trei stâlpi importanți în fluxul de ingerare și analiză a datelor într-o arhitectură modernă.
Trebuie să avem în vedere că există o mare varietate de tipuri de date începând cu înregistrări tranzacționale și continuând cu date referitoare la acțiunile utilizatorilor, metrici operaționale, log-uri, etc. De multe ori, același set de date trebuie să alimenteze mai multe sisteme. De exemplu, dacă ne gândim la log-urile unei aplicații, este evident că le putem analiza offline, doar că uneori avem nevoie să căutăm intrări individuale de log-uri. Astfel nu este fezabil să avem două sisteme diferite care colectează aceste date în mod diferit și alimentează apoi două sisteme. Trebuie să luăm în considerare faptul că, deși putem stoca multe date în Hadoop, nu este foarte practic să stocăm toate datele doar acolo, deoarece sunt multe situații în care avem nevoie de date mult mai rapid decât poate Hadoop să ni le ofere.
Un alt exemplu îl oferă sumedenia de acțiuni ale utilizatorilor. Putem astfel folosi Kafka pentru a realiza comunicarea între diverse părți ale aplicației, dar pe de altă parte putem și stoca în Hadoop aceste acțiuni pentru o analiză ulterioară. Astfel, un singur flux de date este utilizat de doi consumatori care prelucrează datele în mod diferit.
Pe lângă aceasta, Kafka poate să stocheze volume importante de date utilizând sisteme hardware ieftine. De asemenea, Kafka este un sistem care permite subscripții multiple, altfel toate datele publicate pot fi consumate de mai multe ori de către numeroși consumatori. Kafka păstrează toate datele pe disk, reușind să le facă disponibile fie în timp real, fie în loturi mai mari de date, fără că acest lucru să afecteze performanța. De cele mai multe ori Kafka este privit ca un sistem central care este capabil să consume cantități impresionante de date în timp real.
Această platformă de tip flux este prezentată în imaginea alăturată.
Unul dintre marile avantaje ale acestei platforme este acela că oricând putem adăuga un nou sistem specializat care să consume date publicate în Kafka. Este astfel evidențiată direcția în care se îndreaptă dezvoltarea ecosistemului BigData. Vom vedea probabil tot mai multe platforme de date care utilizează sisteme pub-sub cum este Kafka și care vor juca un rol tot mai important pe măsură ce tot mai multe companii se îndreaptă spre procesări de date mari în timp real. Aceasta va avea impact cu siguranță asupra modului în care datele sunt schematizate. Se va face trecerea de la modelul actual în care toate datele sunt stocate în Hadoop și abia apoi datele sunt schematizate pentru a fi compatibile cu diverse sisteme. Acest proces nu este ideal și poate că e mai potrivit să ne gândim ce vom face cu datele încă din momentul în care începe ingestia acestora în Kafka.
Ecosistemul Kafka cuprinde o mulțime de sisteme care alături de acesta contribuie la procesare de fluxuri de date, integrare cu Hadoop, căutări și interogări, integrări cu AWS,
logging sau metrici. Vom detalia foarte succint opțiunile pe care le avem la dispoziție pentru fiecare dintre aceste cazuri.
-Storm-Un framework de procesare de fluxuri de date.
-Samza-Un framework de procesare de fluxuri de date bazat pe YARN.
-Storm Spout-Consumator de mesaje din Kafka, care apoi sunt emise în formatul specific Storm.
-Kafka-Storm-Un conector între Kafka și Storm care include și o integrare cu Avro.
-SparkStreaming-Consumator de date din Kafka pentru Spark.
Integrare cu Hadoop
-Camus - Este folosit de către Linkedin pentru a selecta datele din Kafka și a le transfera spre HDFS
-Kafka Hadoop Loader - Este un utilitar de transfer al datelor din Kafka pe HDFS diferit de cel inclus în distribuția standard
-Flume - Conține un consumator de Kafka și un producător pentru HDFS
-Kangaroo - Un utilitar care consumă date din Kafka în diverse formate având la dispoziție și codecuri de compresie
-ElasticSearch-Poate fi utilizat un consumator de Kafka pentru a citi mesajele pe care să le indexeze apoi în ElasticSearch.
-Presto-Acest conector permite efectuarea de interogări de tip SQL în Kafka.
-Hive-Hive SerDe permite efectuarea de interogări utilizând Hive SQL.
-Syslog producer-Un producător de mesaje de tip syslog care suportă atât date neprocesate cât și date în formatul protobuf.
-LogStash Integration-Integrare Kafka-Logstash.
Este tot mai evident că evoluția BigData este una impresionantă, iar rata de adopție a acestor tehnologii crește continuu.
În tot acest context BigData care în mod evident nu se limitează la Hadoop, Kafka începe să joace un rol tot mai important. Popularitatea sistemului Apache Kafka este în mare parte datorată faptului că este un proiect foarte competitiv și are avantajul de a fi promovat de unii dintre cei mai mari jucători din industrie.
Numărul tot mai mare de senzori care ne însoțesc viață cotidiană, fie că vorbim de telefoane, ceasuri inteligente, dispozitive pentru sport sau senzorii dintr-o casă inteligentă, generează o cantitate enormă de date. Aici Kafka împreună cu sistemele de tip Hadoop joacă un rol crucial completându-se reciproc. Hadoop apare din nevoia de a stoca datele în HDFS pentru analize ulterioare, pe când Kafka este cel care asigură transportul datelor cu o viteză impresionantă, accesul distribuit la date și implicit prelucarea lor în timp real.