C'è qualche motivo per usare RabbitMQ su Kafka?


333

Mi è stato chiesto di valutare RabbitMQ invece di Kafka, ma ho trovato difficile trovare una ragione per cui sta facendo qualcosa di meglio di Kafka. Qualcuno sa se è davvero migliore in termini di produttività, durata, latenza o facilità d'uso?


7
principalmente basate sull'opinione, molte buone domande generano un certo grado di opinione basato sull'esperienza degli esperti, ma le risposte a questa domanda tenderanno ad essere quasi interamente basate su opinioni, piuttosto che su fatti, riferimenti o competenze specifiche.
VdeX,

2
@Guillaume Questo non è necessariamente vero. Sono disponibili client per molte lingue per Kafka: cwiki.apache.org/confluence/display/KAFKA/Clients Inoltre, Confluent offre molti client Kafka open source ad alte prestazioni in altre lingue. Scopri l'offerta "Confluent Open Source": confluent.io/product/compare
Matthias J. Sax,

3
@ MatthiasJ.Sax Sia RabbitMQ che Kafka hanno molti clienti in molte lingue, ma il mio punto riguardava i clienti ufficiali. Nel link che hai dato è scritto nero su bianco: stiamo mantenendo tutto tranne il client jvm esterno alla base di codice principale . Per quanto riguarda confluente, sono davvero un grande utente, ma i client aggiuntivi sono tramite l'API di riposo agnostico della lingua, che sebbene abbastanza impressionante non ha lo stesso throughput del client java ufficiale.
Guillaume,

2
@Guillaume Per i client open source "casuali" della community sono d'accordo; non tutte le alte prestazioni (è abbastanza difficile scrivere un buon cliente) - per questo ho messo "Non è necessariamente vero". ;) Tuttavia, i client C / C ++ e Python forniti da Confluent sono altamente produttivi ed efficienti quanto i client AK Java ...
Matthias J. Sax,

Consiglierei di leggere questo blog: jack-vanlightly.com/blog/2017/12/4/…
roottraveller

Risposte:


468

RabbitMQ è un broker di messaggi solido e generico che supporta diversi protocolli come AMQP, MQTT, STOMP, ecc. Può gestire un throughput elevato. Un caso d'uso comune per RabbitMQ è la gestione di processi in background o attività di lunga durata, come la scansione di file , il ridimensionamento delle immagini o la conversione di PDF. RabbitMQ viene utilizzato anche tra microservizi, dove funge da mezzo di comunicazione tra le applicazioni, evitando colli di bottiglia che passano i messaggi.

Kafka è un bus di messaggi ottimizzato per flussi di dati e riproduzione ad alto ingresso . Usa Kafka quando hai la necessità di spostare una grande quantità di dati, elaborare i dati in tempo reale o analizzare i dati per un periodo di tempo. In altre parole, dove i dati devono essere raccolti, archiviati e gestiti. Un esempio è quando si desidera tenere traccia dell'attività dell'utente in un negozio online e generare articoli suggeriti da acquistare. Un altro esempio è l'analisi dei dati per il monitoraggio, l'ingestione, la registrazione o la sicurezza.

Kafka può essere visto come un broker di messaggi duraturo in cui le applicazioni possono elaborare e rielaborare i dati in streaming su disco. Kafka ha un approccio di routing molto semplice. RabbitMQ ha opzioni migliori se devi indirizzare i tuoi messaggi in modo complesso ai tuoi consumatori. Utilizzare Kafka se è necessario supportare i consumatori batch che potrebbero essere offline o i consumatori che desiderano messaggi a bassa latenza. 

Per capire come leggere i dati da Kafka, dobbiamo prima capire i suoi consumatori e gruppi di consumatori. Le partizioni consentono di parallelizzare un argomento suddividendo i dati su più nodi. Ogni record in una partizione è assegnato e identificato dal suo offset univoco. Questo offset punta al record in una partizione. Nell'ultima versione di Kafka, Kafka mantiene un offset numerico per ogni record in una partizione. Un consumatore in Kafka può commettere automaticamente offset periodicamente oppure può scegliere di controllare manualmente questa posizione impegnata. RabbitMQ manterrà tutti gli stati sui messaggi consumati / riconosciuti / non riconosciuti. Trovo Kafka più complesso da capire rispetto al caso di RabbitMQ, in cui il messaggio viene semplicemente rimosso dalla coda una volta che viene intercettato.

Le code di RabbitMQ sono più veloci quando sono vuote, mentre Kafka conserva grandi quantità di dati con un sovraccarico minimo: Kafka è progettata per contenere e distribuire grandi volumi di messaggi. (Se prevedi di avere code molto lunghe in RabbitMQ, puoi dare un'occhiata alle code pigre .)

Kafka è costruito da zero con in mente il ridimensionamento orizzontale (scala aggiungendo più macchine), mentre RabbitMQ è principalmente progettato per il ridimensionamento verticale (scala aggiungendo più potenza).

RabbitMQ ha un'interfaccia intuitiva integrata che ti consente di monitorare e gestire il tuo server RabbitMQ da un browser web. Tra le altre cose, è possibile gestire code, connessioni, canali, scambi, utenti e autorizzazioni utente: creati, eliminati ed elencati nel browser, è possibile monitorare le tariffe dei messaggi e inviare / ricevere messaggi manualmente. Kafka ha una serie di strumenti open-source, e anche alcuni commerciali una volta , offrendo funzionalità di amministrazione e monitoraggio. Direi che è più facile / veloce ottenere una buona comprensione di RabbitMQ.

Ulteriori letture e alcuni dati di confronto sono disponibili qui: https://www.cloudamqp.com/blog/2019-12-12-when-to-use-rabbitmq-or-apache-kafka.html

Raccomandando anche l'articolo di settore: "Kafka contro RabbitMQ: uno studio comparativo di due implementazioni di pubblicazione / sottoscrizione di riferimento del settore": http://dl.acm.org/citation.cfm?id=3093908

Lavoro in un'azienda che fornisce sia Apache Kafka che RabbitMQ come servizio.


31
Che cosa significa "high-ingress"?
Martin Thoma,

23
high-ingress = ingestione high-throughput
jbustamovej

6
Metto in dubbio il tuo punto su RabbitMQ "progettato principalmente per il ridimensionamento verticale". Come ...
Ryan.Bartsch,

17
Il ridimensionamento orizzontale (ridimensionando aggiungendo più macchine) non offre prestazioni migliori in RabbitMQ. Le prestazioni migliori si ottengono quando si esegue il ridimensionamento verticale (ridimensionare aggiungendo più potenza). Lo so perché lavoro con migliaia di cluster RabbitMQ da molti anni. Puoi eseguire il ridimensionamento orizzontale in Rabbit, ma ciò significa che puoi anche impostare il clustering tra i tuoi nodi, il che rallenterà la tua configurazione. Ho scritto una guida sulle migliori pratiche per alte prestazioni vs alta disponibilità in RabbitMQ: cloudamqp.com/blog/2017-12-29-part1-rabbitmq-best-practice.html
Lovisa Johansson

4
"... mentre Kafka no, presuppone che il consumatore tenga traccia di ciò che è stato consumato e non." Questo non è corretto Kafka tiene traccia dei messaggi consumati da ogni singolo consumatore.
jucardi,

36

Sento questa domanda ogni settimana ... Mentre RabbitMQ (come IBM MQ o JMS o altre soluzioni di messaggistica in generale) viene utilizzato per la messaggistica tradizionale, Apache Kafka viene utilizzato come piattaforma di streaming (messaggistica + archiviazione distribuita + elaborazione dei dati). Entrambi sono progettati per diversi casi d'uso.

Puoi usare Kafka per "messaggistica tradizionale", ma non usare MQ per scenari specifici di Kafka.

L'articolo “ Apache Kafka vs. Enterprise Service Bus (ESB) —Amici, nemici o nemici? ( https://www.confluent.io/blog/apache-kafka-vs-enterprise-service-bus-esb-friends-enemies-or-frenemies/ ) ”spiega perché Kafka non è competitivo ma complementare alle soluzioni di integrazione e messaggistica (incluso RabbitMQ) e come integrarli entrambi.


32

5 Differenze principali tra Kafka e RabbitMQ, cliente che le utilizza: inserisci qui la descrizione dell'immagine

Quale sistema di messaggistica scegliere o dovremmo cambiare il nostro sistema di messaggistica esistente?

Non esiste una risposta a questa domanda. Un approccio possibile rivedere quando si deve decidere quale sistema di messaggistica o si dovrebbe cambiare il sistema attuale è quello di “ valutare la portata e il costo


5
Dov'è la tua fonte per queste informazioni? Non sono d'accordo con la tua risposta riguardo alle prestazioni in RabbitMQ - dipende dal numero di code, connessioni ecc.
Lovisa Johansson,

Corretta. Ma l'intervallo di varianza media è simile a quello sopra indicato. Ci sono scenari in cui fa meglio o peggio dell'intervallo sopra menzionato. Consultare il blog Rabbitmq. Gli ultimi punti dati potrebbero essere cambiati rabbitmq.com/blog/2012/04/25/…
Shishir,

@Shishir - Potresti condividere più dettagli / collegamenti che spiegano i diversi tipi di scambio di messaggi - diretto, fan out, pub / sub ecc? Questi suoni possono essere utili per determinare la giusta piattaforma di messaggistica per determinati requisiti. Grazie
Andy Dufresne

@Shishir un link dal 2012, potrebbe essere cambiato, sì.
Lovisa Johansson,

@AndyDufresne, un po 'in ritardo, ma ecco un link: cloudamqp.com/blog/…
Lovisa Johansson

29

Una differenza fondamentale che voi ragazzi avete dimenticato è RabbitMQ è il sistema di messaggistica basato su push mentre Kafka è il sistema di messaggistica basato su pull. Ciò è importante nello scenario in cui il sistema di messaggistica deve soddisfare diversi tipi di consumatori con diverse capacità di elaborazione. Con il sistema basato su Pull il consumatore può consumare in base alla propria capacità in cui i sistemi push spingono i messaggi indipendentemente dallo stato del consumatore, mettendo così il consumatore ad alto rischio.


3
Puoi ottenere sia pull che push con RabbitMQ
Nikolas

16

RabbitMQ è un broker di messaggi per scopi generici tradizionale. Consente ai server Web di rispondere rapidamente alle richieste e di inviare messaggi a più servizi. I publisher sono in grado di pubblicare messaggi e renderli disponibili per le code, in modo che i consumatori possano recuperarli. La comunicazione può essere asincrona o sincrona.


D'altra parte, Apache Kafka non è solo un broker di messaggi. Inizialmente è stato progettato e implementato da LinkedIn al fine di fungere da coda di messaggi. Dal 2011, Kafka è stato aperto e si è rapidamente evoluto in una piattaforma di streaming distribuita, utilizzata per l'implementazione di pipeline di dati in tempo reale e applicazioni di streaming.

È scalabile orizzontalmente, tollerante ai guasti, malvagio veloce e funziona in produzione in migliaia di aziende.

Le organizzazioni moderne hanno varie pipeline di dati che facilitano la comunicazione tra sistemi o servizi. Le cose diventano un po 'più complicate quando un numero ragionevole di servizi deve comunicare tra loro in tempo reale.

L'architettura diventa complessa poiché sono necessarie varie integrazioni per consentire l'intercomunicazione di questi servizi. Più precisamente, per un'architettura che comprende m servizi sorgente e n target, è necessario scrivere nxm integrazioni distinte. Inoltre, ogni integrazione viene fornita con una specifica diversa, il che significa che potrebbe essere necessario un protocollo diverso (HTTP, TCP, JDBC, ecc.) O una diversa rappresentazione dei dati (binario, Apache Avro, JSON, ecc.), Rendendo le cose ancora più difficili . Inoltre, i servizi di origine potrebbero indirizzare un aumento del carico dalle connessioni che potrebbero influire sulla latenza.

Apache Kafka porta a architetture più semplici e gestibili, disaccoppiando pipeline di dati. Kafka funge da sistema distribuito ad alta velocità in cui i servizi di origine inviano flussi di dati, rendendoli disponibili per i servizi di destinazione per estrarli in tempo reale.

Inoltre, sono disponibili molte interfacce utente open source e di livello enterprise per la gestione dei cluster Kafka. Per maggiori dettagli, consultare i miei articoli Panoramica degli strumenti di monitoraggio dell'interfaccia utente per i cluster Apache Kafka e Perché Apache Kafka?


La decisione di scegliere RabbitMQ o Kafka dipende dai requisiti del progetto. In generale, se si desidera un broker di messaggi pub-sub semplice / tradizionale, selezionare RabbitMQ. Se vuoi costruire un'architettura guidata dagli eventi sulla quale la tua organizzazione agirà in tempo reale sugli eventi, scegli Apache Kafka in quanto fornisce più funzionalità per questo tipo di architettura (ad esempio Kafka Streams o ksqlDB).


15

So che è un po 'tardi e forse lo hai già, indirettamente, detto, ma ancora una volta, Kafka non è affatto una coda, è un registro (come qualcuno ha detto sopra, basato sul sondaggio).

Per semplificare, il caso d'uso più ovvio in cui dovresti preferire RabbitMQ (o qualsiasi techno di coda) rispetto a Kafka è il seguente:

Hai più consumatori che consumano da una coda e ogni volta che c'è un nuovo messaggio nella coda e un consumatore disponibile, vuoi che questo messaggio venga elaborato. Se osservi attentamente come funziona Kafka, noterai che non sa come farlo, a causa del ridimensionamento delle partizioni, avrai un consumatore dedicato a una partizione e avrai problemi di fame. Problema che può essere facilmente evitato utilizzando la semplice techno di coda. Puoi pensare di utilizzare un thread che invierà i diversi messaggi dalla stessa partizione, ma ancora una volta, Kafka non ha alcun meccanismo di riconoscimento selettivo.

Il massimo che puoi fare è fare come quei ragazzi e provare a trasformare Kafka come una coda: https://github.com/softwaremill/kmq

Yannick


10

Usa RabbitMQ quando:

  • Non è necessario gestire Bigdata e si preferisce una comoda interfaccia utente integrata per il monitoraggio
  • Non sono necessarie code replicabili automaticamente
  • Nessun abbonato multiplo per i messaggi: poiché a differenza di Kafka che è un registro, RabbitMQ è una coda e i messaggi vengono rimossi una volta consumati e il riconoscimento è arrivato
  • Se hai i requisiti per usare i caratteri jolly e regex per i messaggi
  • Se la definizione della priorità del messaggio è importante

In breve: RabbitMQ è utile per casi d'uso semplici, con traffico ridotto di dati, con il vantaggio di una priorità di priorità e opzioni di routing flessibili. Per dati di grandi dimensioni e alta produttività utilizzare Kafka.


Gli abbonati multipli vengono gestiti correttamente, non in una singola coda, ma passando a più code potenzialmente dinamiche. Il coniglio non è certamente solo per "casi d'uso semplici", ma per un paragdim completamente diverso, ma non meno complesso dei grandi set di dati che devono essere conservati per lunghi periodi. Puoi espandere la parte prioritaria del messaggio?
Owen,

9

Fornirò una risposta obiettiva basata sulla mia esperienza con entrambi, salterò anche la teoria dietro di loro, assumendo che tu lo sappia già e / o altre risposte abbiano già fornito abbastanza.

RabbitMQ : Sceglierei questo se i miei requisiti sono abbastanza semplici da gestire la comunicazione di sistema attraverso canali / code, la conservazione e lo streaming non sono un requisito. Ad esempio, quando il sistema di produzione ha creato l'asset, questo notifica al sistema di accordo di configurare i contratti e così via.

Kafka : Requisito di approvvigionamento di eventi principalmente, quando potrebbe essere necessario gestire flussi (a volte infiniti), un'enorme quantità di dati contemporaneamente correttamente bilanciati, riprodurre gli offset al fine di garantire un determinato stato e così via. Tieni presente che questa architettura porta anche una maggiore complessità, poiché include concetti come argomenti / partizioni / broker / messaggi di tombe, ecc. Come un'importanza di prima classe.


4

L'unico vantaggio che mi viene in mente è la funzione Transazionale, tutto il resto può essere fatto usando Kafka


2
Kafka ha transazioni
OneCricketeer

2

Il ridimensionamento di entrambi è difficile in modo distribuito tollerante ai guasti, ma vorrei dire che è molto più difficile su larga scala con RabbitMQ. Non è banale capire Pala, Federazione, Coda messaggi specchiati, ACK, problemi di memoria, tolleranza agli errori, ecc. Non dire che non avrete problemi specifici con Zookeeper ecc su Kafka, ma ci sono meno parti mobili da gestire. Detto questo, ottieni uno scambio Polyglot con RMQ che non con Kafka. Se vuoi lo streaming, usa Kafka. Se desideri un IoT semplice o una consegna simile di pacchetti ad alto volume, usa Kafka. Si tratta di consumatori intelligenti. Se si desidera la flessibilità del msg e una maggiore affidabilità con costi più elevati e possibilmente una certa complessità, utilizzare RMQ.


Non sono d'accordo su come si deduca che RMQ abbia "una certa complessità", come se dire che Kafka abbia meno complessità.
Cory Robinson,

1

Se hai esigenze di routing complesse e desideri che una GUI integrata controlli il broker, RabbitMQ potrebbe essere la soluzione migliore per la tua applicazione. Altrimenti, se stai cercando un broker di messaggi per gestire un throughput elevato e fornire l'accesso alla cronologia dei flussi, Kafka è probabilmente la scelta migliore.


[+1] Buona spiegazione, sono sicuro che li hai utilizzati nei tuoi progetti, potresti citarne alcuni che hanno usato uno di essi per montare i sistemi di messaggistica delle applicazioni?
GingerHead

@GingerHead Abbiamo lavorato con una società radiofonica che utilizzava RabbitMQ per la loro interfaccia grafica e la facilità di installazione. È stato fantastico per gli sviluppatori controllare facilmente lo stato dei loro microservizi. La stessa azienda ha inoltre utilizzato Kafka per flussi di dati ad alto volume che necessitavano di un tempo di conservazione superiore a tre giorni. Se sei interessato a leggere di più sulle differenze tra le due tecnologie, ecco un articolo che ho scritto sull'argomento: l' articolo di Kafka vs. RabbitMQ .
Maria Hatfield,

0

Apache Kafka è una scelta popolare per alimentare pipeline di dati. Apache kafka ha aggiunto kafka stream per supportare i più diffusi casi d'uso etl. KSQL semplifica la trasformazione dei dati all'interno della pipeline, preparando i messaggi ad atterrare in modo pulito in un altro sistema. KSQL è il motore SQL di streaming per Apache Kafka. Fornisce un'interfaccia SQL interattiva potente e facile da usare per l'elaborazione in streaming su Kafka, senza la necessità di scrivere codice in un linguaggio di programmazione come Java o Python. KSQL è scalabile, elastico, tollerante ai guasti e in tempo reale. Supporta una vasta gamma di operazioni di streaming, tra cui filtraggio dei dati, trasformazioni, aggregazioni, join, finestre e sessioni.

https://docs.confluent.io/current/ksql/docs/index.html

Rabbitmq non è una scelta popolare per i sistemi etl, ma per quei sistemi in cui richiede semplici sistemi di messaggistica con un throughput inferiore.


0

Mi rendo conto che questa è una vecchia domanda, ma uno scenario in cui RabbitMQ potrebbe essere una scelta migliore è quando si tratta di redazione dei dati.

Con RabbitMQ, per impostazione predefinita una volta che il messaggio è stato consumato, viene eliminato. Con Kafka, per impostazione predefinita, i messaggi vengono conservati per una settimana. È comune impostarlo su un tempo molto più lungo o addirittura non cancellarli mai.

Mentre entrambi i prodotti possono essere configurati per conservare (o non conservare) i messaggi, se la conformità CCPA o GDPR è un problema, preferirei RabbitMQ.


0

Kafka è migliore di RabbitMQ in termini di produttività, durata, latenza. Se ti aspetti transazioni inferiori a 10k / sec, puoi scegliere RabbitMQ, ma anche questo dipende dalla tua implementazione.

Ho implementato Kafka nel nostro prodotto dove gestivamo più di 70.000 transazioni al secondo e la latenza era in media di 15 ms con pochi picchi che raggiungevano i 40 ms. La dimensione dell'argomento era 100kb.

PFB più punti dati su KAFKA e RabbitMQ: Apache Kafka include il broker stesso, che in realtà è la parte più conosciuta e più popolare di esso, ed è stato progettato e commercializzato in modo prominente verso scenari di elaborazione dei flussi. Inoltre, Apache Kafka ha recentemente aggiunto Kafka Streams che si posiziona come alternativa alle piattaforme di streaming come Apache Spark, Apache Flink, Apache Beam / Google Cloud Data Flow e Spring Cloud Data Flow. La documentazione fa un buon lavoro nel discutere casi d'uso comuni come il monitoraggio delle attività del sito Web, le metriche, l'aggregazione dei registri, l'elaborazione dei flussi, il reperimento di eventi e i registri di commit. Uno di quei casi d'uso che descrive è la messaggistica, che può generare confusione. Quindi scompattiamolo un po 'e otteniamo un po' di chiarezza su quali scenari di messaggistica sono i migliori per Kafka, come:

Streaming da A a B senza routing complesso, con throughput massimo (100k / sec +), erogato in ordine partizionato almeno una volta. Quando l'applicazione deve accedere alla cronologia dei flussi, consegnata in ordine partizionato almeno una volta. Kafka è un archivio di messaggi duraturo e i clienti possono ottenere un "replay" del flusso di eventi su richiesta, al contrario dei broker di messaggi più tradizionali in cui una volta che un messaggio è stato consegnato, viene rimosso dalla coda. Sourcing degli eventi di elaborazione dei flussi RabbitMQ è una soluzione di messaggistica di uso generale, spesso utilizzata per consentire ai server Web di rispondere rapidamente alle richieste invece di essere costretti a eseguire procedure pesanti in termini di risorse mentre l'utente attende il risultato. È anche utile per distribuire un messaggio a più destinatari per il consumo o per bilanciare i carichi tra i lavoratori a carico elevato (20k + / sec). Quando le tue esigenze vanno oltre la velocità effettiva, RabbitMQ ha molto da offrire: funzionalità per consegna affidabile, routing, federazione, HA, sicurezza, strumenti di gestione e altre funzionalità. Esaminiamo alcuni scenari migliori per RabbitMQ, come:

L'applicazione deve funzionare con qualsiasi combinazione di protocolli esistenti come AMQP 0-9-1, STOMP, MQTT, AMQP 1.0. È necessario un controllo / garanzie di consistenza più precisi per singolo messaggio (code di messaggi in sospeso, ecc.) Tuttavia, Kafka ha recentemente aggiunto un supporto migliore per le transazioni. La tua applicazione ha bisogno di varietà in punto a punto, richiesta / risposta e pubblicazione / sottoscrizione della messaggistica Routing complesso per i consumatori, integrazione di più servizi / app con logica di routing non banale RabbitMQ può anche affrontare efficacemente molti dei casi di utilizzo forte di Kafka sopra, ma con il aiuto di software aggiuntivo. RabbitMQ viene spesso utilizzato con Apache Cassandra quando l'applicazione deve accedere alla cronologia dei flussi o con il plug-in LevelDB per applicazioni che richiedono una coda "infinita", ma nessuna delle funzionalità viene fornita con RabbitMQ stesso.


0

La risposta breve è "riconoscimenti di messaggi". RabbitMQ può essere configurato per richiedere conferme di messaggi. Se un ricevitore fallisce, il messaggio ritorna in coda e un altro destinatario può riprovare. Mentre puoi farlo in Kafka con il tuo codice, funziona con RabbitMQ immediatamente.

Nella mia esperienza, se hai un'applicazione che ha i requisiti per interrogare un flusso di informazioni, Kafka e KSql sono la soluzione migliore. Se vuoi un sistema di accodamento, stai meglio con RabbitMQ.


0

La risposta più votata copre la maggior parte, ma vorrei evidenziare il punto di vista del caso d'uso di luce. Kafka può fare quel coniglio mq può fare, la risposta è sì ma può coniglio mq fare tutto quello che fa kafka, la risposta è no. Quindi qual è la cosa che coniglio mq non può fare che distingue kafka, ovvero l'elaborazione distribuita dei messaggi. Con questo ora rileggi la risposta più votata e avrà più senso. Per elaborare, prendi un caso d'uso in cui è necessario creare un sistema di messaggistica che abbia un throughput molto elevato, ad esempio "Mi piace" in Facebook e per questo hai scelto coniglio mq. Hai creato uno scambio e una coda e un consumatore in cui tutti gli editori (in questo caso gli utenti FB) possono pubblicare messaggi di "Mi piace". Poiché la tua produttività è elevata, creerai più thread nel consumatore per elaborare i messaggi in parallelo ma sei ancora limitato dalla capacità hardware della macchina su cui è in esecuzione il consumatore. Supponendo che un consumatore non sia sufficiente per elaborare tutti i messaggi: cosa faresti? Puoi aggiungere un altro consumatore in coda? No, non puoi farlo. Puoi creare una nuova coda e associare quella coda allo scambio che pubblica il messaggio "Mi piace", la risposta non è causa perché i messaggi verranno elaborati due volte. Questo è il problema principale che kafka risolve. Ti permette di creare partizioni distribuite (Coda in coniglio mq) e consumatore distribuito che parlano tra loro. Ciò garantisce che i messaggi in un argomento vengano elaborati dai consumatori distribuiti in vari nodi (Macchine). I broker Kafka garantiscono che i messaggi vengano bilanciati in base al carico in tutte le partizioni di tale argomento. Il gruppo di consumatori si assicura che tutti i consumatori si parlino e il messaggio non venga elaborato due volte. Ma nella vita reale non affronterai questo problema a meno che il tuo through put non sia seriamente alto perché coniglio mq può anche elaborare i dati molto velocemente anche con un solo consumatore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.