Che cos'è Kafka?

Apache Kafka è un archivio dati distribuito ottimizzato per l'acquisizione e l'elaborazione di dati in streaming in tempo reale. Lo streaming dei dati è costituito dai dati generati in modo continuo da migliaia di origini dati, che generalmente inviano record di dati in modo simultaneo. Una piattaforma di streaming deve gestire questo afflusso costante di dati ed elaborare i dati in modo sequenziale e incrementale.

Kafka offre tre funzioni principali ai suoi utenti:

  • Pubblica e sottoscrive flussi di record
  • Archivia efficacemente i flussi di record nell'ordine in cui sono stati generati
  • Elabora flussi di record in tempo reale

Kafka viene utilizzato principalmente per creare pipeline e applicazioni di streaming di dati in tempo reale che si adattano ai flussi di dati. Combina messaggistica, archiviazione ed elaborazione dei flussi per consentire l'archiviazione e l'analisi di dati storici e in tempo reale. 

Per cosa si usa Kafka?

Kafka viene utilizzato per creare pipeline di dati di streaming e applicazioni di streaming in tempo reale. Una pipeline di dati elabora e sposta i dati in modo affidabile da un sistema all'altro, e un'applicazione di streaming è un'applicazione che consuma flussi di dati. Ad esempio, se vuoi creare una pipeline di dati che raccolga i dati sull'attività degli utenti per monitorare in tempo reale il modo in cui le persone usano il tuo sito web, Kafka verrebbe utilizzato per acquisire e memorizzare lo streaming dei dati, eseguendo allo stesso tempo operazioni di lettura per le applicazioni che alimentano la pipeline di dati. Kafka viene spesso utilizzato anche come broker di messaggi, ovvero come una piattaforma che elabora e media la comunicazione tra due applicazioni.

Come funziona Kafka?

Kafka combina due modelli di messaggistica, accodamento e publish-subscribe, per offrire agli utenti i principali vantaggi di entrambi. L'accodamento consente di distribuire l'elaborazione dei dati su molte istanze dell'utente, rendendola altamente scalabile. Tuttavia, le code tradizionali non prevedono più abbonati. L'approccio publish-subscribe prevede più abbonati, ma poiché ogni messaggio viene inviato a tutti gli abbonati non può essere utilizzato per distribuire il lavoro tra più processi di lavoro. Kafka utilizza un modello di log partizionato per unire queste due soluzioni. Un log è una sequenza ordinata di record, e questi log sono suddivisi in segmenti, o partizioni, che corrispondono ai diversi abbonati. Ciò significa che possono esserci più abbonati per lo stesso argomento, e a ciascuno viene assegnata una partizione per consentire una maggiore scalabilità. Infine, il modello di Kafka offre la riproducibilità, che consente a più applicazioni indipendenti che leggono i flussi di dati di funzionare in modo autonomo e alla propria velocità.

Accodamento

Publish-Subscribe

Quali sono i vantaggi dell'approccio di Kafka?

Scalabilità

Il modello di log partizionato di Kafka consente di distribuire i dati su più server, rendendoli scalabili oltre i limiti consentiti da un singolo server. 

Rapidità

Kafka disaccoppia i flussi di dati in modo da garantire una latenza molto bassa, il che lo rende estremamente veloce. 

Durabilità

Le partizioni vengono distribuite e replicate su molti server e i dati vengono tutti scritti su disco. Questo aiuta a proteggersi dai guasti del server, rendendo i dati molto resistenti ai guasti e durevoli. 

In che modo l'architettura di Kafka integra diversi modelli?

Kafka rimedia alla presenza di due diversi modelli pubblicando record su argomenti diversi. Ogni argomento ha un log partizionato, che è un log di commit strutturato che tiene traccia di tutti i record in ordine e ne aggiunge di nuovi in tempo reale. Queste partizioni sono distribuite e replicate su più server, garantendo un'elevata scalabilità, un'ottima tolleranza agli errori e un eccellente parallelismo. A ciascun utente viene assegnata una partizione nell'argomento, che consente più abbonati mantenendo l'ordine dei dati. Combinando questi modelli di messaggistica, Kafka offre i vantaggi di entrambi. Kafka funge anche da sistema di archiviazione molto scalabile e tollerante ai guasti, scrivendo e replicando tutti i dati su disco. Per impostazione predefinita, Kafka conserva i dati archiviati su disco fino all'esaurimento dello spazio, ma l'utente può anche impostare un limite di conservazione. Kafka ha quattro API:

  • Producer API: utilizzata per pubblicare un flusso di record su un argomento di Kafka.
  • Consumer API: utilizzata per iscriversi agli argomenti ed elaborare i relativi flussi di record.
  • Streams API: consente alle applicazioni di comportarsi come stream processor, che ricevono un flusso in ingresso dagli argomenti e lo trasformano in un flusso in uscita che va in argomenti di output diversi.
  • Connector API: consente agli utenti di automatizzare senza problemi l'aggiunta di un'altra applicazione o sistema di dati ai loro attuali argomenti di Kafka.

Quali sono le differenze tra Apache Kafka e RabbitMQ?

RabbitMQ è un broker di messaggi open source che usa un approccio basato sulla coda di messaggistica. Le code sono distribuite su un cluster di nodi e opzionalmente replicate, con ogni messaggio consegnato a un solo utente.

Caratteristiche

Apache Kafka

RabbitMQ

Architettura

Kafka usa un modello di log partizionato, che combina gli approcci basati sulla coda di messaggistica e sull'iscrizione alla pubblicazione.

RabbitMQ utilizza una coda di messaggistica.

Scalabilità

Kafka fornisce scalabilità permettendo la distribuzione delle partizioni su server diversi.

Aumenta il numero di utenti in coda per impiegare la scalabilità orizzontale per l'elaborazione tra gli utenti concorrenti.

Conservazione dei messaggi

In base ai criteri, ad esempio, i messaggi possono essere archiviati per un giorno. L'utente può configurare questa finestra di conservazione.

Basata sul riconoscimento, il che significa che i messaggi vengono eliminati man mano che vengono consumati.

Utenti multipli

Più utenti possono iscriversi allo stesso argomento, perché Kafka consente di riprodurre lo stesso messaggio per un determinato periodo di tempo.

Non è possibile che più utenti ricevano lo stesso messaggio, poiché i messaggi vengono rimossi man mano che vengono consumati.

Replica

Gli argomenti vengono replicati automaticamente, ma l'utente può configurarli manualmente in modo che non vengano replicati.

I messaggi non vengono replicati automaticamente, ma l'utente può configurarli manualmente in modo che vengano replicati.

Ordinamento dei messaggi

Ogni utente riceve le informazioni in ordine grazie all'architettura dei log partizionati.

I messaggi vengono recapitati agli utenti nell'ordine di arrivo in coda. Se ci sono utenti concorrenti, ogni utente elaborerà un sottoinsieme di quel messaggio.

Protocolli

Kafka usa un protocollo binario su TCP.

Advanced messaging queue protocol (AMQP) con supporto tramite plugin: MQTT, STOMP.

Scopri di più sulla differenza tra Kafka e RabbitMQ»

In che modo AWS può supportare i requisiti di Kafka?

Scopri di più su come implementare manualmente Kafka su AWS qui.

AWS offre anche Amazon MSK, il servizio completamente gestito più compatibile, disponibile e sicuro per Apache Kafka, che consente ai clienti di popolare i data lake, inviare modifiche da e verso i database e potenziare il machine learning e le applicazioni di analisi. Con Amazon MSK, i clienti possono dedicare meno tempo alla gestione dell'infrastruttura e più tempo alla creazione di applicazioni. Ulteriori informazioni su Amazon MSK.

Fasi successive su AWS

Registrati per creare un account gratuito

Ottieni accesso istantaneo al Piano gratuito di AWS.

Registrati 
Inizia a lavorare nella console

Inizia subito a creare nella Console di gestione AWS.

Accedi