Compararea principalelor platforme de mesagerie

Apache Kafka și RabbitMQ sunt doi brokeri de mesagerie folosiți pe scară largă care permit decuplarea schimbului de mesaje între aplicații. Care sunt cele mai importante caracteristici ale lor și ce le face diferite unele de altele? Să trecem la concepte.

RabbitMQ

RabbitMQ este o aplicație open-source de broker de mesaje pentru comunicare și schimb de mesaje între părți. Pentru că a fost dezvoltat în Erlang, este foarte ușor și eficient. Limbajul Erlang a fost dezvoltat de Ericson cu accent pe sistemele distribuite.

Este considerat un broker de mesagerie mai tradițional. Se bazează pe modelul editor-abonat, deși poate trata comunicarea sincron sau asincron, în funcție de ceea ce este setat în configurație. De asemenea, asigură livrarea și comandarea mesajelor între producători și consumatori.

Acceptă protocoalele AMQP, STOMP, MQTT, HTTP și socket web. Trei modele pentru schimbul de mesaje: subiect, fanout și direct:

  • Schimb direct și individual pe subiect sau temă [topic]
  • Toți consumatorii conectați la coadă primesc [fanout] mesaj
  • Fiecare consumator primește un mesaj trimis [direct]

Următoarele sunt componentele RabbitMQ:

Producătorii

Producătorii sunt aplicații care creează și trimit mesaje către RabbitMQ. Acestea pot fi orice aplicație care se poate conecta la RabbitMQ și poate publica mesaje.

Consumatori

Consumatorii sunt aplicații care primesc și procesează mesaje de la RabbitMQ. Acestea pot fi orice aplicație care se poate conecta la RabbitMQ și se poate abona la mesaje.

Schimburile

Bursele sunt responsabile pentru primirea mesajelor de la producători și direcționarea lor către cozile corespunzătoare. Există mai multe tipuri de schimburi, inclusiv schimburi directe, fanout, subiecte și antete, fiecare cu propriile reguli de rutare.

Cozile

Cozile sunt locurile în care mesajele sunt stocate până când sunt consumate de consumatori. Acestea sunt create de aplicații sau automat de RabbitMQ atunci când un mesaj este publicat într-un schimb.

Legături

Legăturile definesc relația dintre schimburi și cozi. Acestea specifică regulile de rutare pentru mesaje, care sunt utilizate de schimburi pentru a direcționa mesajele către cozile corespunzătoare.

Arhitectura RabbitMQ

RabbitMQ folosește un model pull pentru livrarea mesajelor. În acest model, consumatorii solicită în mod activ mesajele brokerului. Mesajele sunt publicate către schimburile responsabile de direcționarea mesajelor către cozile corespunzătoare, pe baza cheilor de rutare.

Arhitectura RabbitMQ se bazează pe o arhitectură client-server și constă din mai multe componente care lucrează împreună pentru a oferi o platformă de mesagerie fiabilă și scalabilă. Conceptul AMQP prevede componentele Schimburi, Cozi, Legături, precum și Editori și Abonați. Editorii publică mesaje către schimburi.

Schimburile preiau aceste mesaje și le distribuie la cozi de la 0 la n pe baza anumitor reguli (legături). Mesajele stocate în cozi pot fi apoi preluate de consumatori. Într-o formă simplificată, gestionarea mesajelor se face în RabbitMQ după cum urmează:

Sursa imagine: VMware

  • Editorii trimit mesaje la schimb;
  • Exchange trimite mesaje la cozi și alte schimburi;
  • Când un mesaj este primit, RabbitMQ trimite mesaje de confirmare către expeditori;
  • Consumatorii mențin conexiuni TCP persistente la RabbitMQ și declară ce coadă primesc;
  • RabbitMQ direcționează mesajele către consumatori;
  • Consumatorii trimit confirmări de succes sau erori de primire a mesajului;
  • La primirea cu succes, mesajul este eliminat din coadă.
  Citiți și salvați știrile tehnice adresate în mod special pentru dvs

Apache Kafka

Apache Kafka este o soluție de mesagerie open-source distribuită dezvoltată de LinkedIn în Scala. Este capabil să proceseze mesaje și să le stocheze cu un model editor-abonat cu scalabilitate și performanță ridicate.

Pentru a stoca evenimentele sau mesajele primite, distribuiți subiectele între noduri folosind partiții. Combină atât tiparele editor-abonat, cât și cele de cozi de mesaje și este, de asemenea, responsabilă pentru asigurarea ordinii mesajelor pentru fiecare consumator.

Kafka este specializat în debit mare de date și latență scăzută pentru a gestiona fluxurile de date în timp real. Acest lucru se realizează prin evitarea prea multă logică din partea serverului (broker), precum și a unor detalii speciale de implementare.

De exemplu, Kafka nu folosește RAM deloc și scrie date imediat în sistemul de fișiere al serverului. Deoarece toate datele sunt scrise secvențial, se obține performanță de citire-scriere, care este comparabilă cu cea a memoriei RAM.

Acestea sunt principalele concepte ale Kafka care îl fac scalabil, performant și tolerant la erori:

Subiect

Un subiect este o modalitate de a eticheta sau de a clasifica un mesaj; imaginați-vă un dulap cu 10 sertare; fiecare sertar poate fi un subiect, iar dulapul este platforma Apache Kafka, așa că pe lângă categorizarea grupează mesajele, o altă analogie mai bună despre subiect ar fi pusă în bazele de date relaționale.

Producător

Producătorul sau producătorul este cel care se conectează la o platformă de mesagerie și trimite unul sau mai multe mesaje pe o anumită temă.

Consumator

Consumatorul este persoana care se conectează la o platformă de mesagerie și consumă unul sau mai multe mesaje pe o anumită temă.

Agent

Conceptul de broker în platforma Kafka nu este altceva decât practic însuși Kafka, iar el este cel care gestionează subiectele și definește modul de stocare a mesajelor, jurnalelor etc.

Cluster

Clusterul este un set de brokeri care comunică între ei sau nu pentru o mai bună scalabilitate și toleranță la erori.

Fișier jurnal

Fiecare subiect își stochează înregistrările într-un format de jurnal, adică într-un mod structurat și secvenţial; fișierul jurnal, prin urmare, este fișierul care conține informațiile despre un subiect.

Paravane

Partițiile sunt stratul de partiție al mesajelor dintr-un subiect; această partiționare asigură elasticitatea, toleranța la erori și scalabilitatea Apache Kafka, astfel încât fiecare subiect să aibă mai multe partiții în locații diferite.

Arhitectura lui Apache Kafka

Kafka se bazează pe un model push pentru livrarea mesajelor. Folosind acest model, mesajele din Kafka sunt transmise în mod activ consumatorilor. Mesajele sunt publicate la subiecte, care sunt partiționate și distribuite între diferiți brokeri din cluster.

Consumatorii se pot abona apoi la unul sau mai multe subiecte și pot primi mesaje pe măsură ce sunt produse pe acele subiecte.

În Kafka, fiecare subiect este împărțit în una sau mai multe partiții. În partiție se termină evenimentele.

Dacă există mai mult de un broker în cluster, atunci partițiile vor fi distribuite uniform între toți brokerii (pe cât posibil), ceea ce va permite scalarea sarcinii de scriere și citire într-un singur subiect la mai mulți brokeri simultan. Deoarece este un cluster, rulează folosind ZooKeeper pentru sincronizare.

Primește magazine și distribuie înregistrări. O înregistrare este date generate de un nod de sistem, care poate fi un eveniment sau o informație. Este trimis către cluster, iar clusterul îl stochează într-o partiție de subiect.

  Cum să gestionați profilurile HBO Max pentru copii și adulți

Fiecare înregistrare are un offset de secvență, iar consumatorul poate controla offset-ul pe care îl consumă. Astfel, dacă este nevoie de reprocesare a subiectului, se poate face pe baza offset-ului.

Sursa imagine: Wikipedia

Logica, cum ar fi gestionarea ultimului ID de mesaj citit al unui consumator sau decizia în care partiție sunt scrise datele nou sosite, este complet mutată către client (producător sau consumator).

Pe lângă conceptele de producător și consumator, există și conceptele de subiect, partiție și replicare.

Un subiect descrie o categorie de mesaje. Kafka atinge toleranța la erori prin replicarea datelor dintr-un subiect și scalarea prin partiționarea subiectului pe mai multe servere.

RabbitMQ vs. Kafka

Principalele diferențe dintre Apache Kafka și RabbitMQ se datorează modelelor fundamental diferite de livrare a mesajelor implementate în aceste sisteme.

În special, Apache Kafka operează pe principiul tragerii (tragerii) atunci când consumatorii înșiși primesc mesajele de care au nevoie de la subiect.

RabbitMQ, pe de altă parte, implementează modelul push prin trimiterea mesajelor necesare către destinatari. Ca atare, Kafka diferă de RabbitMQ în următoarele moduri:

#1. Arhitectură

Una dintre cele mai mari diferențe dintre RabbitMQ și Kafka este diferența de arhitectură. RabbitMQ folosește o arhitectură tradițională de cozi de mesaje bazată pe broker, în timp ce Kafka folosește o arhitectură de platformă de streaming distribuită.

De asemenea, RabbitMQ folosește un model de livrare a mesajelor bazat pe pull, în timp ce Kafka folosește un model bazat pe push.

#2. Salvarea mesajelor

RabbitMQ pune mesajul în coada FIFO (First Input – First Output) și monitorizează starea acestui mesaj în coadă, iar Kafka adaugă mesajul în jurnal (scrie pe disc), lăsând receptorul să se ocupe de obținerea necesarului. informatii din subiect.

RabbitMQ șterge mesajul după ce a fost livrat destinatarului, în timp ce Kafka stochează mesajul până când este programat să curețe jurnalul.

Astfel, Kafka salvează starea curentă și toate stările anterioare ale sistemului și poate fi folosit ca o sursă de încredere de date istorice, spre deosebire de RabbitMQ.

#3. Echilibrarea sarcinii

Datorită modelului pull de livrare a mesajelor, RabbitMQ reduce latența. Cu toate acestea, este posibil ca destinatarii să depășească dacă mesajele ajung la coadă mai repede decât le pot procesa.

Deoarece în RabbitMQ, fiecare receptor solicită/încarcă un număr diferit de mesaje, distribuția muncii poate deveni neuniformă, ceea ce va cauza întârzieri și pierderea ordinii mesajelor în timpul procesării.

Pentru a preveni acest lucru, fiecare receptor RabbitMQ configurează o limită de preluare prealabilă, o limită a numărului de mesaje neconfirmate acumulate. În Kafka, echilibrarea încărcăturii este realizată automat prin redistribuirea destinatarilor în secțiuni (partiție) ale subiectului.

#4. Dirijare

RabbitMQ include patru moduri de direcționare către diferite schimburi pentru coadă, permițând un set puternic și flexibil de modele de mesagerie. Kafka implementează doar o modalitate de a scrie mesaje pe disc fără rutare.

#5. Comandarea mesajelor

RabbitMQ vă permite să mențineți ordinea relativă în seturi (grupuri) arbitrare de evenimente, iar Apache Kafka oferă o modalitate ușoară de a menține ordinea cu scalabilitate prin scrierea secvenţială a mesajelor într-un jurnal (subiect) replicat.

FeatureRabbitMQKafka ArchitectureSalvează mesajele pe un disc atașat la brokerArhitectură platformă de streaming distribuită Model de livrare Bazat pe tragere Bazat pe pushSalvarea mesajelor Nu se poate salva mesaje Menține comenzile scriind la un subiect Echilibrarea încărcăturii Configurează o limită de preîncărcare Efectuat automat RutareaInclude 4 moduri de rutare. Are doar 1 mod de a menține comenzile în grupuri de mesaje pentru a menține comenzile prin scrierea de mesaje. la subiect Procese externe Nu necesită Necesită rularea Zookeeper instancePlugin-uri Mai multe plugin-uri Are suport limitat pentru pluginuri

  Top 6 software de contabilitate pentru întreprinderile mici și liber profesioniști

RabbitMQ și Kafka sunt ambele sisteme de mesagerie utilizate pe scară largă, fiecare având propriile puncte forte și cazuri de utilizare. RabbitMQ este un sistem de mesagerie flexibil, fiabil și scalabil, care excelează la așteptarea mesajelor, făcându-l o alegere ideală pentru aplicațiile care necesită livrarea de mesaje fiabilă și flexibilă.

Pe de altă parte, Kafka este o platformă de streaming distribuită care este concepută pentru procesarea în timp real a volumelor mari de date, ceea ce o face o alegere excelentă pentru aplicațiile care necesită procesarea și analiza în timp real a datelor.

Principalele cazuri de utilizare pentru RabbitMQ:

Comerț electronic

RabbitMQ este utilizat în aplicațiile de comerț electronic pentru a gestiona fluxul de date între diferite sisteme, cum ar fi gestionarea stocurilor, procesarea comenzilor și procesarea plăților. Poate gestiona volume mari de mesaje și se asigură că acestea sunt livrate în mod fiabil și în ordinea corectă.

Sănătate

În industria de asistență medicală, RabbitMQ este utilizat pentru a face schimb de date între diferite sisteme, cum ar fi înregistrările medicale electronice (EHR), dispozitivele medicale și sistemele de sprijin pentru deciziile clinice. Poate ajuta la îmbunătățirea îngrijirii pacienților și la reducerea erorilor, asigurându-se că informațiile corecte sunt disponibile la momentul potrivit.

Servicii financiare

RabbitMQ permite mesageria în timp real între sisteme, cum ar fi platformele de tranzacționare, sistemele de gestionare a riscurilor și gateway-urile de plată. Vă poate ajuta să vă asigurați că tranzacțiile sunt procesate rapid și în siguranță.

sisteme IoT

RabbitMQ este utilizat în sistemele IoT pentru a gestiona fluxul de date între diferite dispozitive și senzori. Poate ajuta la asigurarea că datele sunt livrate în mod sigur și eficient, chiar și în medii cu lățime de bandă limitată și conectivitate intermitentă.

Kafka este o platformă de streaming distribuită concepută pentru a gestiona volume mari de date în timp real.

Principalele cazuri de utilizare pentru Kafka

Analiză în timp real

Kafka este utilizat în aplicațiile de analiză în timp real pentru a procesa și analiza datele pe măsură ce sunt generate, permițând companiilor să ia decizii pe baza informațiilor actualizate. Poate gestiona volume mari de date și se poate scala pentru a satisface nevoile chiar și ale celor mai solicitante aplicații.

Agregarea jurnalelor

Kafka poate agrega jurnalele din diferite sisteme și aplicații, permițând companiilor să monitorizeze și să depaneze problemele în timp real. Poate fi folosit și pentru a stoca jurnalele pentru analiză și raportare pe termen lung.

Învățare automată

Kafka este folosit în aplicațiile de învățare automată pentru a transmite date către modele în timp real, permițând companiilor să facă predicții și să ia măsuri pe baza informațiilor actualizate. Poate ajuta la îmbunătățirea acurateței și eficacității modelelor de învățare automată.

Părerea mea atât despre RabbitMQ, cât și despre Kafka

Dezavantajul capacităților largi și variate ale RabbitMQ pentru gestionarea flexibilă a cozilor de mesaje este consumul crescut de resurse și, în consecință, degradarea performanței la sarcini crescute. Deoarece acesta este modul de operare pentru sistemele complexe, în cele mai multe cazuri, Apache Kafka este cel mai bun instrument pentru gestionarea mesajelor.

De exemplu, în cazul culegerii și agregarii multor evenimente din zeci de sisteme și servicii, ținând cont de rezervarea lor geografică, valorile clienților, fișierele jurnal și analizele, cu perspectiva creșterii surselor de informații, voi prefera să folosesc Kafka, cu toate acestea, dacă vă aflați într-o situație în care aveți nevoie doar de mesagerie rapidă, RabbitMQ va face treaba foarte bine!

Puteți citi și cum să instalați Apache Kafka în Windows și Linux.