Kafka è un sistema di messaggistica distribuito ad alte prestazioni sviluppato da LinkedIn, ampiamente utilizzato in scenari come la raccolta di log, l'elaborazione di dati in streaming, la distribuzione di messaggi online e offline, e altro ancora. Sebbene non sia progettato come un MQ tradizionale, Kafaka può sostituire i sistemi di messaggistica tradizionali come ActiveMQ nella maggior parte dei casi.
Kafka organizza il flusso dei messaggi per argomenti, e il server che contiene i messaggi si chiama broker, e i consumatori possono iscriversi a uno o più argomenti. Per bilanciare il carico, i messaggi di un argomento possono essere divisi in più partizioni, e più partizioni, maggiore è il parallelismo e la capacità di Kafka.
I cluster Kafka richiedono il supporto di zookeeper per implementarli, e zookeeper è già incluso nell'ultima distribuzione kafka, che può essere implementata per avviare contemporaneamente un server zookeeper e un server Kafka, oppure utilizzare altri cluster di zookeeper esistenti.
A differenza del MQ tradizionale, i consumatori devono mantenere un offset da soli, e quando ricevono messaggi da kafka, estraggono i messaggi solo dopo lo offset corrente. Il client scala/java di Kafka implementa già questa parte della logica salvando lo offset allo zookeeper. Ogni consumatore può scegliere un ID, e chi ha lo stesso ID riceverà lo stesso messaggio solo una volta.Se i consumatori di un argomento usano tutti lo stesso id, si tratta di una coda tradizionale. Se ogni consumatore usa un ID diverso, si tratta di un pub-sub tradizionale.
Recensione:
Consumo di kafka
1. I consumatori dello stesso group_id, solo un consumatore può consumare messaggi (Modalità coda in coda)
2. I consumatori di group_id diversi ricevono le stesse notizie
Vantaggi di Kafka
Distribuito e altamente scalabile. I cluster Kafka possono essere scalati in modo trasparente per aggiungere nuovi server al cluster.
Alte prestazioni. Le prestazioni di Kafka superano di gran lunga quelle delle implementazioni tradizionali di MQ come ActiveMQ e RabbitMQ, in particolare Kafka, che supporta anche operazioni batch. L'immagine seguente mostra i risultati del test di stress sulle prestazioni dei consumatori di LinkedIn:
Tolleranza ai difetti. I dati di ogni partizione in Kafka vengono replicati su diversi server. Quando un broker fallisce, il servizio ZooKeeper avviserà il produttore e il consumatore, che passano a un altro broker.
Svantaggi di Kafka:
Ripeti i messaggi. Kafka garantisce che ogni messaggio venga consegnato almeno una volta e, sebbene le probabilità siano basse, c'è la possibilità che un messaggio venga consegnato più volte. Le notizie sono fuori ordine. Sebbene i messaggi all'interno di una partizione siano garantiti ordinati, se un argomento ha più partizioni, la consegna dei messaggi tra partizioni non è garantita che sia ordinata. Complessità. Kafka richiede il supporto di cluster di allevatori di zoo, e gli argomenti di solito richiedono lavoro manuale per creare, distribuire e mantenere più costosi delle code di messaggi generali
.NET/C# coda di messaggi operazioni Kafka
Per prima cosa, usa .NET Core 3.1 per creare due nuovi progetti per console, ovvero Kafka-Consumer e Kafka-Producer
Usa nuget per fare riferimento al pacchetto Confluent.Kafka in questo modo, con il seguente comando:
Indirizzo GitHub:Il login del link ipertestuale è visibile.
Iniziamo per primi il programma Producer, e se iniziamo per primi il consumatore, riceveremo il seguente errore:
Errore avvenuto: Broker: Argomento o partizione sconosciuta Questo articolo approfondirà le impostazioniEnableAutoOffsetStore è falso, cioè, impostando manualmente la memoria offset (simile a un messaggio di conferma manuale)
I consumatori non impostano OffsetStore dopo il consumo
Prova a usare il produttore per produrre due messaggi, attiva il consumo del consumatore, MaxPollIntervalMs = 10000 // 10 secondi senza impostazione manuale, permette agli altri client di consumare, ovviamente non verrà consumato dagli altri clienti entro 10 secondi
MaxPollIntervalMs spiega
Per i consumatori avanzati, il tempo massimo consentito per consumare i messaggi tra una chiamata e l'altra (ad esempio, rd_kafka_consumer_poll()). Se questo intervallo viene superato, il consumatore viene considerato guasto e il gruppo viene ribilanciato in modo che la partizione venga riassegnata a un altro membro del gruppo di consumatori. Attenzione: Al momento i commit offset potrebbero non essere possibili. Nota: Si raccomanda di impostare "enable.auto.offset.store=false" per le applicazioni che sono in elaborazione a lungo, e poi memorizzare esplicitamente l'offset (usando offsets_store()) dopo l'elaborazione del messaggio* per assicurarsi che l'offset non venga automaticamente validato prima che l'elaborazione sia completata. Controlla una volta al secondo a intervalli di due minuti. Per ulteriori informazioni, vedi KIP-62. Le rappresentazioni sono le seguenti:
OffsetStore viene impostato dopo che il consumatore ha finito di spendere
codice
Dopo che la configurazione è completata, aspetta 10 secondi e continuerà a funzionareRicevuto l'ultimo messaggio(Quando il consumatore si collega al broker,Inizia il consumo dalla posizione offsetSe c.Commit(cr) è impostato; L'ultimo messaggio non verrà ricevuto ripetutamente.
Visualizza codice sorgente
commit dello offset + 1, e infine chiamare Librdkafka.topic_partition_list_destroy(cOffsets);
Il login del link ipertestuale è visibile.
Il login del link ipertestuale è visibile.
Imposta un GroupID diverso
Prova a impostare un GroupId diverso tramite il parametro della riga di comando, e poi invia un messaggio tramite il produttore, come mostrato nell'immagine seguente:
Sia clinet1 che client2Ricevi messaggi storici, e dopo che il produttore invia un messaggio, entrambi saranno quasiRicevi messaggi contemporaneamente。
I nuovi consumatori ricevono solo nuovi messaggi
Come si fa a far sì che un nuovo cliente riceva solo nuovi messaggi ignorando i dati storici?
Le impostazioni sono le seguenti:
Come mostrato di seguito:
Codice produttore
Come segue:
Codice per i consumatori
Come segue:
Download del codice sorgente
Turisti, se volete vedere il contenuto nascosto di questo post, vi prego Risposta
|