Apache Kafka: piattaforma di messaggistica e streaming per sistemi altamente scalabili

L'utilizzo di app, servizi web, server di applicazioni ecc. mette i responsabili delle aziende davanti a numerose sfide. Una delle più frequenti, ad esempio, è quella di garantire un trasporto semplice e una rielaborazione dei flussi di dati quanto più rapidi ed efficienti possibile. Un software che semplifica entrambe le cose è l’applicazione di messaggistica e streaming Apache Kafka. Sviluppata in origine come servizio di gestione della coda dei messaggi per la piattaforma LinkedIn, questa soluzione open source fornisce adesso un pacchetto completo per il salvataggio, la trasmissione e la rielaborazione di dati.

Che cos’è Apache Kafka?

Il software Apache Kafka è un’applicazione multipiattaforma della Apache Software Foundation che si focalizza sulla rielaborazione di flussi di dati. Il progetto è nato nel 2011 a opera di LinkedIn, l’azienda dell’omonimo social network professionale, con lo scopo di sviluppare una coda di messaggi (message queue). Dalla sua pubblicazione con licenza libera (Apache 2.0), il software ha decisamente ampliato le sue funzioni e da una semplice applicazione per la coda si è trasformato in un’efficiente piattaforma di streaming dalle numerose funzionalità, utilizzata anche da aziende famose come Netflix, Microsoft o Airbnb.

Nel 2014 gli sviluppatori originari del team di LinkedIn hanno fondato l’azienda Confluent, che offre la versione più estesa di Apache Kafka. Qui il programma presenta alcune funzioni aggiuntive, in parte gratuite e in parte a pagamento.

Quali sono le funzioni di base di Apache Kafka?

Apache Kafka ha lo scopo principale di ottimizzare la trasmissione e l’elaborazione di flussi di dati che vengono scambiati tramite il collegamento diretto tra destinatario e fonte di dati. Kafka agisce come un’istanza di messaggistica tra mittente e destinatario e offre soluzioni alle tipiche difficoltà che possono insorgere in questo tipo di collegamenti. In questo modo la piattaforma è anche in grado di risolvere il problema della mancata memorizzazione temporanea di dati o messaggi, quando il destinatario (ad esempio a causa di problemi di rete) non è disponibile.

In più una coda Kafka ben configurata impedisce un sovraccarico del destinatario da parte del mittente. Questo avviene sempre quando le informazioni devono essere inviate in maniera più rapida tramite collegamento diretto, per essere ricevute ed elaborate. Inoltre il software Kafka è adatto anche nel caso in cui il sistema target dovesse ricevere il messaggio, ma collassasse durante il processo di elaborazione. Mentre normalmente il mittente, nonostante il collasso, potrebbe credere che l’elaborazione sia andata a buon fine, con Apache Kafka riceverà una notifica dell’errore.

Rispetto ai servizi che gestiscono solo la coda dei messaggi come le banche dati, Apache Kafka è tollerante agli errori e questo crea nel software le premesse per un’elaborazione continua di messaggi, ossia di dati. In combinazione con un’alta scalabilità e la possibilità di distribuire le informazioni trasportate a piacere su molti sistemi (log delle transazioni distribuito), Apache Kafka è un’eccellente soluzione per tutti quei servizi che devono garantire un salvataggio e un’elaborazione rapida dei dati nonché un'alta disponibilità.

L'architettura di Apache Kafka in breve

Apache Kafka viene eseguito come cluster su uno o più server, che possono comprendere diversi centri di calcolo. I singoli nodi di un cluster, denominati broker, salvano e categorizzano i flussi di dati in entrata nei cosiddetti topic. Qui vengono suddivisi in partizioni, replicati e distribuiti nel cluster e contrassegnati con una marca temporale. In questo modo la piattaforma di streaming garantisce un’alta disponibilità e un accesso rapido. Apache Kafka differenzia i topic in “normal topic” e “compacted topic”. Nei normal topic Kafka può cancellare i messaggi una volta superato il periodo o il limite di salvataggio, mentre le voci contenute nei compacted topic non hanno alcun limite, né di tempo né di spazio.

Le applicazioni che scrivono dati in un cluster di Kafka vengono definiti produttori, mentre tutte le applicazioni che leggono i dati di un cluster di Kafka si definiscono invece consumatori. La componente centrale da cui attingono i produttori e i consumatori per l’elaborazione di flussi di dati è una biblioteca Java chiamata Kafka Streams. Il supporto di una scrittura transazionale garantisce che i messaggi vengano trasmessi una volta sola (senza doppioni), fenomeno definito anche come “exactly-once delivery” (in italiano: consegna “solo una volta”).

N.B.

La biblioteca Java Kafka Streams è la soluzione standard consigliata per l’elaborazione di dati nei cluster di Kafka. Ma è anche possibile usare Apache Kafka per l’elaborazione e lo streaming con altri sistemi.

Basi tecniche: le interfacce di Kafka

Per garantire alle applicazioni l’accesso ad Apache Kafka, il software offre cinque diverse interfacce chiave:

  • Kafka Producer: l’interfaccia Producer permette alle applicazioni di inviare i flussi di dati ai broker di un cluster di Apache per categorizzarli e salvarli (nei topic già citati).
  • Kafka Consumer: attraverso l’interfaccia Consumer, i consumatori di Apache Kafka ricevono l’accesso ai dati, salvati nei topic di un cluster.
  • Kafka Streams: l’interfaccia Streams permette a un’applicazione di fungere da processore di streaming, per trasformare i flussi di dati in entrata in flussi di dati in uscita.
  • Kafka Connect: grazie all’interfaccia Connect è possibile impostare produttori e consumatori riutilizzabili che collegano i topic di Kafka con le applicazioni o le banche dati esistenti.
  • Kafka AdminClient: l’interfaccia “AdminClient” offre una semplice amministrazione e ispezione di un cluster di Kafka.

La comunicazione tra applicazioni del cliente e singoli server di un cluster di Kafka avviene mediante un semplice ma efficiente protocollo indipendente dal linguaggio di scrittura sulla base di un TPU. Di solito gli sviluppatori mettono a disposizione un client Java per Apache Kafka, ma sono disponibili anche client scritti in altri linguaggi come PHP, Python, C/C++, Ruby, Perl oppure Go.

Scenari di impiego di Apache Kafka

Apache Kafka è stato concepito per supportare un’alta quantità di dati in scrittura e lettura. Per le interfacce già citate e l’elevata flessibilità, scalabilità e tolleranza agli errori, questo software open source risulta interessante per l’utilizzo con le applicazioni più disparate. In particolare, però, Apache Kafka risulta adatto ai seguenti scopi:

  • Pubblicare e abbonarsi a flussi di dati: la storia del progetto open source è cominciata proprio per utilizzare Apache Kafka come sistema di messaggistica. Anche dopo l’ampliamento delle sue funzioni, questo software funziona al meglio per la trasmissione di messaggi tramite un sistema di coda, ma è adatto anche alla trasmissione di messaggi tramite un broadcast.
  • Rielaborare flussi di dati: grazie all’interfaccia Stream le applicazioni che devono reagire a determinati eventi in tempo reale e necessitano perciò di rielaborare flussi di dati nella maniera più rapida ed efficace possibile trovano in Apache Kafka un partner efficiente.
  • Salvare flussi di dati: è possibile utilizzare Apache Kafka anche come sistema di salvataggio ripartito e tollerante agli errori. Non fa differenza se si vogliono salvare sul server 50 kilobyte o 50 terabyte di dati consistenti.

Naturalmente tutti gli elementi indicati si possono combinare a piacimento. Perciò Apache Kafka non solo salva i dati e li rende disponibili in ogni momento come una complessa piattaforma di streaming, ma li elabora anche in tempo reale collegandoli con tutte le applicazioni e i sistemi desiderati.

Panoramica dei tipici casi d’uso di Apache Kafka:

  • Sistema di messaggistica
  • Webanalytics
  • Sistema di salvataggio
  • Processore di streaming
  • Event sourcing
  • Analisi e gestione dei logfile
  • Soluzioni di monitoraggio
  • Log delle transazioni
Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top