Apache Kafka

RabbitMQ vs Apache Kafka

RabbitMQ vs Apache Kafka
In questo post, cercheremo di confrontare e stabilire alcune differenze nei due broker di messaggi più popolari, RabbitMQ e Apache Kafka.

Ogni volta che vogliamo integrare broker di messaggi nella nostra applicazione che ci consente di scalare facilmente e connettere il nostro sistema in modo asincrono, ci sono molti broker di messaggi che possono creare l'elenco da cui sei costretto a sceglierne uno, come:

Ciascuno di questi broker di messaggi ha il proprio elenco di pro e contro, ma le opzioni più impegnative sono le prime due, RabbitMQ e Apache Kafka. In questa lezione elencheremo i punti che possono aiutare a restringere la decisione di andare con l'uno rispetto all'altro. Infine, vale la pena sottolineare che nessuno di questi è migliore di un altro in tutti i casi d'uso e dipende completamente da ciò che si vuole ottenere, quindi non c'è una risposta giusta!

Inizieremo con una semplice introduzione di questi strumenti.

Apache Kafka

Come abbiamo detto in questa lezione, Apache Kafka è un registro di commit distribuito, a tolleranza di errore, scalabile orizzontalmente. Ciò significa che Kafka può eseguire molto bene un termine di divisione e regola, può replicare i tuoi dati per garantire la disponibilità ed è altamente scalabile, nel senso che puoi includere nuovi server in fase di esecuzione per aumentare la sua capacità di gestire più messaggi.

Kafka Produttore e Consumatore

ConiglioMQ

RabbitMQ è un broker di messaggi più generico e più semplice da usare che tiene traccia di quali messaggi sono stati consumati dal client e mantiene l'altro. Anche se per qualche motivo il server RabbitMQ si interrompe, puoi essere certo che i messaggi attualmente presenti nelle code sono stati archiviati sul Filesystem in modo che quando RabbitMQ si riattiva, quei messaggi possono essere elaborati dai consumatori in modo coerente.

RabbitMQ Working

Superpotere: Apache Kafka

Il principale superpotere di Kafka è che può essere utilizzato come sistema di coda, ma non è limitato a questo. Kafka è qualcosa di più simile un tampone circolare che può scalare quanto un disco sulla macchina del cluster e quindi ci consente di rileggere i messaggi. Ciòpuòessere fatto dal client senza dover dipendere dal cluster Kafka poichéècompleta responsabilità del client annotare i metadati del messaggio che sta attualmente leggendo e può rivisitare Kafka in un secondo momento in un intervallo specificato per leggere di nuovo lo stesso messaggio.

Si prega di notare che il tempo in cui questo messaggio può essere riletto è limitato e può essere configurato nella configurazione di Kafka. Quindi, una volta che quel tempo è finito, non c'è modo che un cliente possa leggere mai più un messaggio più vecchio.

Superpotere: ConiglioMQ

Il principale superpotere di RabbitMQ è che è semplicemente scalabile, è un sistema di accodamento ad alte prestazioni che ha regole di coerenza molto ben definite e capacità di creare molti tipi di modelli di scambio di messaggi. Ad esempio, ci sono tre tipi di scambio che puoi creare in RabbitMQ:

  1. Scambio diretto: scambio di argomenti uno a uno
  2. Scambio di argomenti: A argomento è definito su cui vari produttori possono pubblicare un messaggio e vari consumatori possono impegnarsi ad ascoltare su quel tema, così ognuno di loro riceve il messaggio che viene inviato a questo argomento.
  3. Scambio di fanout: questo è più rigoroso dello scambio di argomenti poiché quando un messaggio viene pubblicato su uno scambio di fanout, tutti i consumatori collegati a code che si legano allo scambio di fanout riceveranno il messaggio.

Ho già notato la differenza tra RabbitMQ e Kafka? La differenza è che se un consumatore non è connesso a uno scambio fanout in RabbitMQ quando è stato pubblicato un messaggio, andrà perso perché altri consumatori hanno consumato il messaggio, ma ciò non accade in Apache Kafka poiché qualsiasi consumatore può leggere qualsiasi messaggio come mantengono il proprio cursore.

RabbitMQ è incentrato sul broker

Un buon broker è qualcuno che garantisce il lavoro che svolge su se stesso e questo è ciò in cui è bravo RabbitMQ. È inclinato verso garanzie di consegna tra produttori e consumatori, con messaggi transitori preferiti a messaggi durevoli.

RabbitMQ utilizza il broker stesso per gestire lo stato di un messaggio e assicurarsi che ogni messaggio venga consegnato a ciascun consumatore autorizzato.

RabbitMQ presume che i consumatori siano per lo più online.

Kafka è incentrato sul produttore

Apache Kafka è incentrato sul produttore in quanto è completamente basato sul partizionamento e su un flusso di pacchetti di eventi contenenti dati e li trasforma in broker di messaggi durevoli con cursori, che supportano i consumatori batch che potrebbero essere offline o i consumatori online che desiderano messaggi a bassa latenza.

Kafka si assicura che il messaggio rimanga al sicuro fino a un determinato periodo di tempo replicando il messaggio sui suoi nodi nel cluster e mantenendo uno stato coerente.

Allora, Kafka no presumere che qualcuno dei suoi consumatori sia per lo più online e che non gli importi.

Ordinazione dei messaggi

Con RabbitMQ, l'ordine dell'editoria è gestita in modo coerente e i consumatori riceveranno il messaggio nell'ordine pubblicato stesso. D'altra parte, Kafka non lo fa in quanto presume che i messaggi pubblicati siano di natura pesante, quindi i consumatori sono lenti e possono inviare messaggi in qualsiasi ordine, quindi non gestisce anche l'ordine da solo. Tuttavia, possiamo impostare una topologia simile per gestire l'ordine in Kafka utilizzando il scambio di hash coerente o plug-in di sharding., o anche più tipi di topologie.

Il compito completo gestito da Apache Kafka è agire come un "ammortizzatore" tra il flusso continuo di eventi e i consumatori di cui alcuni sono online e altri possono essere offline - solo batch che consuma su base oraria o addirittura giornaliera.

Conclusione

In questa lezione abbiamo studiato le principali differenze (e anche le somiglianze) tra Apache Kafka e RabbitMQ. In alcuni ambienti, entrambi hanno mostrato prestazioni straordinarie come RabbitMQ consuma milioni di messaggi al secondo e Kafka ha consumato diversi milioni di messaggi al secondo. La principale differenza architetturale è che RabbitMQ gestisce i suoi messaggi quasi in memoria e quindi utilizza un grande cluster (30+ nodi), mentre Kafka utilizza effettivamente i poteri delle operazioni di I/O su disco sequenziali e richiede meno hardware.

Ancora una volta, l'utilizzo di ciascuno di essi dipende ancora completamente dal caso d'uso in un'applicazione. Buon messaggio !

Come utilizzare AutoKey per automatizzare i giochi Linux
AutoKey è un'utilità di automazione desktop per Linux e X11, programmata in Python 3, GTK e Qt. Utilizzando la sua funzionalità di scripting e MACRO, ...
Come mostrare il contatore FPS nei giochi Linux
I giochi Linux hanno avuto una grande spinta quando Valve ha annunciato il supporto Linux per il client Steam e i loro giochi nel 2012. Da allora, mol...
Come scaricare e giocare a Sid Meier's Civilization VI su Linux
Introduzione al gioco Civilization 6 è una versione moderna del concetto classico introdotto nella serie dei giochi Age of Empires. L'idea era abbasta...