Sunteți pe pagina 1din 5

Tehnologii big data. Apache Kafka.

Apache
Hadoop.
Nume_student
Universitea Politehnica,Timișoara, România
xyz@yahoo.com

Abstract—Una dintre problemele majore ale sistemelor


actuale de procesare a cantităților mari de date este
scalabilitatea. Într-un sistem clasic, nevoia de putere de
procesare și spațiu de stocare se asigură prin adăugarea de
resurse în mașina fizică (RAM, HDD), însa există o limită
până la care se poate scala un sistem în acest fel. Apache
Kafka înlocuiește configurația clasică cu un sistem format
din mai multe noduri, numărul nodurilor putând fi scalat în
funcție de cerințele aplicației software. De asemenea
disponibilitatea sistemlui format este foarte mare din cauza
numărului mare de noduri și a replicării datelor în multiple
noduri.
Figura 1 Producătorii trimit mesaje catre clusterul Kafka, iar apoi
I. INTRODUCERE acestea sunt citite de către consumatori[1]

LTE(Long Term Evolution) este un standard de


comunicare fără fir, de o viteză ridicată, folosit în clustere (noduri) până la satisfacerea puterii de procesare
principal de telefoane mobile dar și de alte dispozitive și necesare.
terminale. O rețea LTE este formată dintr-un număr mare
de antene numite eNBuri interconectate între ele și II. TEHNOLOGII BIG DATA
conectate cu nucleul rețelei. Nucleul rețelei este
responsabil pentru toate operațiunile și serviciile oferite de A. Kafka
o rețea. Aici sunt prezente două componente folosite în
Kafka este un sistem distribuit, partiționat și replicat
prototipul descris în această lucrare: SAM și NPO.
care oferă funcționalitatea unui sistem de mesagerie.[2]
SAM este serverul pe care rulează o aplicație în care Arhitectura Kafka permite unui singur cluster să aibă
este declarată topologia rețelei LTE(eNBuri, celule și
relațiile dintre ele). Cu ajutorul SAMului putem adăuga rol de nod central într-o configurație mare. Sistemul poate
echipamente noi în rețea sau putem modifica parametrii fi extins cu ușurință, adăugarea de noi clustere făcându-se
echipamentelor funcționale. fără pierderi de date sau fără ca sistemul să fie oprit.
NPO este de asemenea un server pe care rulează o serie Fluxurile de date sunt partiționate și sunt distribuite în
de aplicații menite să ajute procesul de optimizare al mai multe clustere. În acest fel pot fi gestionate fluxuri
rețelei. Acesta colectează contori și indicatori de la SAM foarte mari de date care nu pot fi procesate de un sistem
și generează statistici și rapoarte pe baza cărora operatorul classic într-un timp scurt.
rețelei poate decide modificarea unor parametrii pentru a Fiecare flux de date este persistat pe disc, acesta fiind
obține o rețea cât mai optimizată din punct de vedere al replicat în diferite clustere pentru a prevenii eventuale
vitezei sau al acoperirii. pierderi. Un sistem Kafka rulează pe unul sau mai multe
Această lucrare iși propune să descrie un prototip servere, fiecare dintre acestea purtând numele de broker.
Kafka care listează și procesează contorii și indicatorii Fiecare broker Kafka poate procesa în fiecare secundă
unei rețele LTE. sute de megabytes de date produse de operații de scriere
Fiecare eNB generează date care sunt preluate de către și citire a mii de clienți.
SAM. Toate aceste date sunt mai apoi colectate de către Kafka clasifică fluxurile de date în categorii numite
serverul NPO. Din 15 în 15 minute contorii și indicatorii topicuri. Procesele care publică aceste fluxuri de date
sunt stocati într-o bază de date Oracle, iar valorile lor sunt într-un topic se numesc producătoare, iar procesele care
consolidate în fiecare noapte. Însă din cauza mărimii sunt înregistrate la topicuri și consumă aceste mesaje se
rețelei, baza de date poate avem dimensiuni uriașe. Din numesc consumatoare. [3]
aceast motiv, NPOul este limitat în ceea ce privește
numărul maxim de celule suportate, 48.000, respectiv Mesajele fiecărui topic Kafka sunt persistate în partiții.
numărul maxim de eNBuri, 8.000. Fiecare partiție conține mesajele ordonate dupa momentul
în care au fost scrise în topic, acceptând în continuu
Prin înlocuirea Oracle cu perechea Kafka – Hadoop se
dorește creșterea numărului de celule suportate la mesaje noi. Serverul Kafka persistă toate mesajele
100.000. Configurarea sistemului în funcție de mărirea publicate într-un topic pentru o perioadă configurabilă de
rețelei fiecărui client se va face prin adăugarea de noi timp, chiar dacă aceste mesaje au fost consumate deja de
către un consumator.
Există o variabilă numită offset în care se păstrează stocare a datelor. Acest sistem are proprietatea de a fi
valoarea poziției mesajului curent citit de către fiecare operațional în orice moment prin detectarea și rezolvarea
consumator. Offsetul este controlat de către consumator. ușoară a situaților în care un server se defectează.[7]
Fiecare partiție este replicată pe un număr configurabil de
servere. Acest lucru este util în cazul în care unul din
serverele folosite are o problemă (hardware sau Hadoop conține următoarele module incluse:
software). Producătorul este responsabil de alegerea
 Hadoop Common: Pachet cu utilități comune
partiției în care va persista mesajul nou publicat. [4]
folosit de alte module Hadoop.

 Hadoop Distributed File System (HDFS):


Sistem distribuit de fișiere care permite stocarea
și accesarea unor fișiere persistate pe disc.

 Hadoop YARN: Folosit pentru managementul


resurselor clusterelor și pentru programarea
lansării automate a unor procese.

 Hadoop MapReduce: Sistem care are la bază


YARN, folosit pentru paralelizarea procesării
unor seturi mari de date.[8]

HDFS este un sistem distribuit de fișiere folosit de


Figura 2 Partițiile unui topic Kafka Hadoop. Unul din avantajele majore ale acestuia este
http://sookocheff.com/post/kafka/kafka-in-a-nutshell/
scalabilitatea. Pentru comunicație acesta folosește
Replicarea Kafka: motivul pentru care s-a introdus protocolul TCP/IP. Una din limitările HDFS este
replicarea Kafka este pentru a avea o disponibilitate mai imposibiliatea accesării fișierelor direct din sistemul de
mare a datelor. Kafka garantează că orice mesaj publicat operare. Pentru aceast lucru, Hadoop pune la dispoziție
cu succes nu se va pierde și va fi consumat, chiar și în API Java, Trift API(C++, Java, Phyton, Php ), linie de
cazul pierderii unor servere. [5] comandă dar și o aplicație web a sistemului.
Avantajele utilizării Kafka: YARN (Yet Another Resource Negotiator) este o
- producătorul Kafka nu trebuie să aștepte ca mesajul prerechizită pentru Hadoop, acesta oferind gestionarea
trimis să fie consumat din broker, ci trimite mesajele in resurselor și o platformă software centralizată pentru
masura în care brokerul le poate procesa. securitate și diverse operații.[9]
- ori de căte ori consumarea mesajului nu se face cu Hadoop MapReduce este un modul software folosit la
success, consumatorul poate cere recitirea acelui mesaj. scrierea de aplicații care procesează cantități mari de date
- consumatorul citește mesajele cu viteza proprie, (de ordinul Terabytes) în paralel în cadrul unor clustere
nedepinzând de producator sau de broker. mari, fiecare cluster având până la câteva sute de mii de
- Kafka poate fi folosit ca o coadă de mesaje, noduri. De cele mai multe ori nodurile folosite pentru
mărimea fluxului de mesaje fiind foarte mare. procesare sunt aceleași cu cele folosite pentru persistarea
- prin folosirea brokerilor Kafka, procesul de datelor în Hadoop Distributed File System(HDFS). [10]
distribuire a mesajelor poate fi paralelizat. Producătorii și
Avantajele utilizării HADOOP[11]:
consumatorii sunt independenți, sistemul devenind
- HADOOP poate persista cantități mari de date
flexibil și ușor adaptabil unor schimbări.
- HDFS este scalabil și permite accesul rapid la
- pentru că mesajele nu sunt trimise direct
informații, poate deservii un număr mare de clienți prin
consumatorilor, aceștia pot ține evidența clară a ultimelor
simpla adăugare a unor noi mașini virtuale sau fizice în
mesaje citite. Acest fapt permite consumatorilor Kafka să
cluster.
consume mesajele în timp real, dar și periodic un grup de
- implementarea simplă; trebuie implementate numai
mesaje colectate într-un anumit interval de timp.
procesele map-reduce, felul în care se persisită datele pe
Kafka a fost dezvoltat de către compania LinkedIn
disc este realizate de HADOOP.
începând cu anul 2010, Kafka fiind la baza aplicației
- procesele MapReduce se pot executa local pe aceeași
companiei. Cei 1400 brokeri folosiți procesează peste
mașină, acest lucru ducând la reducerea utilizari rețelei.
2000 TB de informații în fiecare săptămână. [6]
- portabilitate între multiple platforme hardware și
sisteme de operare.
B. Hadoop
- menținerea mai multor copii ale datelor și realocarea
Biblioteca software Apache Hadoop este un mediu de acestora în mod automat în cazul unor defecțiuni.
lucru care permite procesarea distribuită a unor seturi - HDFS este un sistem de fișiere bazat pe blocuri de
largi de date. Acest lucru se realizează cu ajutorul date. Fiecare fișier este împărțit în blocuri cu o
clusterelor (unul sau mai multe servere, până la cateva dimensiune fixă și persistat în cluster în una sau mai
mii), fiecare dintre ele oferind putere de procesare și de multe mașini care au capacitate de stocare.
- programele MapReduce pot fi scrise în Java folosind disc și RAM partajat) pe care se vor instala serverele de
API corespunzător pus la dispoziție de HADOOP. Kafka, Hadoop și Zookeeper.
- poate paraleliza procese astfel o cantitate mai mare Pe fiecare mașina virtuală s-a instalat sistemul de
de date sunt procesate. operare RedHat 6.5. Pentru a facilita instalarea și folosirea
tehnologiilor Big data s-a folosit Cloudera, o platformă
III. PROTOTIP KAFKA software care aduce la un loc toate modulele și aplicațiile
folosite [13]. De asemenea aceasta asigură instalarea,
A. Intro configurarea și rularea aplicaților necesare.
În cadrul acestei lucrări s-a realizat un prototip care
folosește Kafka. Acesta a fost scris în Java folosind C. Configurarea serverului Kafka
bibliotecile puse la dispoziție de Apache și are două
componente majore: Pentru a porni serverul Kafka, este nevoie să
- listarea celor mai noi fișiere PM generate de SAM configurăm o serie de parametrii. Cei mai importanți sunt
- analizarea fiecărui fișier și extragerea valorilor următorii:
indicatorilor pentru fiecare tip de dată (celulă, eNB, X2 și - log.dirs (locația de pe disc în care se vor salva logurile
relație între celule). aplicației Kafka)
Atât prima cât și a doua parte este formată din - log.retention.hours(numărul minim de ore în care
producători și consumatori. logurile trebuie să fie persistate)
Primul producător se contectează la SAM printr-o - num.partitions (numărul de partiții create pentru
conexiune de tip SFTP, și listează toate fișierele dintr-o fiecare topic. Pentru a paraleliza procesul de consumare,
locație specifică. Numele fiecărui fișier este de forma acest număr poate să crească. Valoarea inițială standard
<nume_eNB_dataora>.tar.gz și conține un fișier .xml cu este 1)
toate valorile contorilor și indicatorilor din ultimul interval - zookeeper.connect=localhost:2181 (adresa în rețea a
de timp de 15 minute. serverului și portul zookeeper folosit)
Dupa ce serverul Kafka este pornit, se poate începe
crearea topicurilor în care producătorul Kafka va scrie
mesajele. Comanda cu care putem face acest lucru este:
#kafka-topics --create --zookeeper localhost:2181
--replication-factor 1 --partitions 1 --topic testTopic ,
considerând numele topicului testTopic, factorul de
replicare = 1 și numărul de partiții al acestui topic = 1. De
asemenea serverul de zookeeper trebuie specificat.
Pentru a lista toate topicurile Kafka existente, se poate
folosi comanda următoare:
#kafka-topics --list --zookeeper localhost:2181
Figura 3 Arhitectura Kafka [12] Având serverul Kafka corect configurat și pornit și
topicurile create, putem să pornim procesele java din
prototip, producătoarele și consumatoarele.
Scopul primului producător este să identifice fișierele Primul producator are rolul de a se conecta la SAM și a
noi apărute și să adauge numele fiecăruia într-un topic lista toate fișierele PM nou apărute. Pornirea procesului
Kafka. Aceste nume de fișiere vor fi citite de către java al producatorului de listare se face prin specificarea
consumatorul acestui topic și vor fi trimise ca parametru următorilor parametri:
unui apel de metoda care va analiza și extrage valorile
contorilor și ale indicatorilor fiecărui eNB. Obiectele
relevante prototipului sunt: eNBuri, celule, relații între - producer.topic=topicListingProducer (numele topicului
celule și X2(relații între două eNBuri). folosit de către producătorul de listare)
- pm.hostname=135.247.174.111 (IPul SAMului pe care
se va face listarea fișierelor PM)
Acest consumator descris mai sus are și rol de
- pm.username=root (numele utilizatorului, folosit la
producător, deoarece acesta extrage valorile indicatorilor
pentru cele 4 tipuri de obiecte și le publică în mai multe autentificare)
topicuri. Există câte un topic pentru fiecare tip de obiect. - pm.password=password (parola folosită la autentificare)
În acest fel vor fi colectate valorile aceluiaș tip de obiect - pm.path=/opt/PM/ (calea către locația de pe serverul
pentru a putea fi folosite mai ușor. SAM unde sunt generate fișierele PM la fiecare 15
Fiecare topic va fi consumat de către un consumator minute)
dedicat, în funcție de tipurile de obiecte persistate în topic. - initial.delay=300000 (numărul de milisecunde de
așteptare înainte ca procesul să scrie mesajele în topic.
B. Instalare Acesta este folosit pentru a avea acces la monitorizare în
Mașina fizică folosită pentru acest prototip este un HP timp real cu diverse unelte software de profil. Pentru acest
DL380 cu 2.4 Tb spațiu pe disc, 128 Gb RAM și 2 CPU prototip s-a folosit JVM Monitor ).
E5-2670 2.66 Ghz. Pe această mașină s-a instalat ESXI5.5 - bootstrap.servers=135.247.174.105:9092 (IPul și portul
pentru a crea mai multe mașini virtuale(250 Gb spațiu pe serverului pe care este instalat Kafka)
- key.serializer= - group.id=kafka-proto (numele grupului Kafka)
org.apache.kafka.common.serialization.StringSerializer - key.deserializer=
- value.serializer= org.apache.kafka.common.serialization.StringDeserializer
org.apache.kafka.common.serialization.StringSerializer. - value.deserializer=
Urmează pornirea celui de-al doilea proces . Acesta org.apache.kafka.common.serialization.StringDeserializer
este unul hibrid, producător - consumator. El citește - block.on.buffer.full=true(în cazul în care bufferul se
mesajele scrise în topicul topicListingProducer de către umple, există posibilitatea să oprim citirea de noi mesaje
primul producător. Aceste mesaje sunt de fapt URLurile sau să generăm erori. Valoarea implicită este true).
fișierelor PM listate în SAM. Aceste fișiere sunt copiate
pe mașina virtuală pe care rulează Kakfa și mai apoi sunt D. Distribuirea încărcării serverului
analizate și interpretate cu ajutorul unei librării interne Kafka este optimizat pentru mesaje de dimensiuni
Nokia. Astfel sunt extrase informațiile referitoare la
mici, cea mai bună performanță fiind înregistrată la
topologia rețelei și valorile indicatorilor și contorilor
acesteia. Toate informațiile sunt ordonate dupa tipul de mesaje de 1Kb. Mesaje mai mari de 10Mb pot duce la
obiect de care aparțin. Astfel se pot extrage ușor datele funcționarea necorespunzătoare a sistemului. De aceea se
relevante pentru acest prototip (celule, eNBuri, relații de pot folosi mai mulți brokeri Kafka, adică mai multe
vecinătete între celule și X2). instanțe ale aceluiași tip de proces pornit pe mai multe
Aici apare cel de-al doilea producător care scrie aceste servere. Fiecare broker alocă spațiul bufferului de
date în topicul recordsTopic. Mesajele sunt grupate în replica.fetch.max.bytes pentru fiecare partiție replicată.
funcție tipul obiectului. Pentru ca mărimea acestor mesaje Putem considera ca exemplu
să nu fie prea mare se folosește procesul de comprimare. replica.fetch.max.bytes=1Mb și numărul de partiții =
Cu parametrul compression.type (poate avea una din 1000. În acest caz avem nevoie de 1Gb RAM disponibil.
următoarele valori: none, gzip, snappy, sau lz4) obținem Generalizând obținem următoarea formulă de calcul a
comprimarea realizată direct de către procesul Kafka. distribuției:
Mărimea unui mesaj corespunzător unui obiect este în Numărul de partiții * max_message_size < memoria
medie 30-40 Kb, dar poate să ajungă și la 100Kb. La un RAM disponibilă
număr de 8000 eNBuri maxim suportate într-o rețea, Cu cât dimensiunea mesajelor este mai mare, există
numărul de mesaje este foarte mare: două posibile cazuri:
- 8.000 eNBuri - creștem RAM disponibil pe server
- 48.000 celule - micșorăm numărul de partiții
- 4.600.000 relatii de vecinatate
- ~500.000 X2, IV. CONCLUZII
toate aceste mesaje fiind generate din 15 în 15 minute.
Apache Kafka s-a dovedit a fi potrivit pentru ceea ce
se dorea și anume creșterea numărului de eNBuri și celule
suportate într-o rețea LTE.
Acest prototip va sta la baza dezvoltării următoarei
versiuni ai aplicației NPO, scalabilitatea fiind avantajul
major al utilizării Kafka.

BIBLIOGRAFIE

[1] http://kafka.apache.org
Figura 4 Arhitectura prototipului de listare + parsare fișiere PM [2] Nishant Garg, Apache Kafka, Packt Publishing, 25 Oct 2013
[3] Nishant Garg, Learning Apache Kafka – Second Edition, Packt
Publishing, 2015
Ultima componentă a prototipului este cosumatorul care [4] http://kafka.apache.org/documentation.html#gettingStarted
consumă toate mesajele din topicul recordsTopic . Acest [5] https://cwiki.apache.org/confluence/display/KAFKA/
proces este pornit cu următorii parametrii: [6] https://engineering.linkedin.com/blog/2016/04/kafka-ecosystem-
- consumer.topic=recordsTopic (numele topicului din care at-linkedin
se vor consuma mesajele) [7] Tom White, Hadoop: The Definitive Guide, O`Reilly Media, Mai
2009
- consumer.name=ConsumerProto2 (numele
[8] http://hadoop.apache.org
consumatorului) [9] http://hortonworks.com/apache/yarn/
- consumer.sleeptime=4000 [10] Tanmay Deshpande, Hadoop Real-World Solutions Cookbook-
- initial.delay=300000 (numărul de secunde de așteptare Second Edition, Packt Publishing, Mar 2016
înainte ca procesul să citească mesajele din topic) [11] http://www.j2eebrain.com/java-J2ee-hadoop-advantages-and-
- bootstrap.servers=135.247.174.105:9092 (IPul și portul disadvantages.html
serverului pe care este instalat Kafka) [12] https://www.infoq.com/articles/apache-kafka
[13] http://www.cloudera.com/about-cloudera/faqs.html

S-ar putea să vă placă și