L'u­ti­liz­zo di app, servizi web, server di ap­pli­ca­zio­ni ecc. mette i re­spon­sa­bi­li delle aziende davanti a numerose sfide. Una delle più frequenti, ad esempio, è quella di garantire un trasporto semplice e una rie­la­bo­ra­zio­ne dei flussi di dati quanto più rapidi ed ef­fi­cien­ti possibile. Un software che sem­pli­fi­ca entrambe le cose è l’ap­pli­ca­zio­ne di mes­sag­gi­sti­ca e streaming Apache Kafka. Svi­lup­pa­ta in origine come servizio di gestione della coda dei messaggi per la piat­ta­for­ma LinkedIn, questa soluzione open source fornisce adesso un pacchetto completo per il sal­va­tag­gio, la tra­smis­sio­ne e la rie­la­bo­ra­zio­ne di dati.

Che cos’è Apache Kafka?

Il software Apache Kafka è un’ap­pli­ca­zio­ne mul­ti­piat­ta­for­ma della Apache Software Foun­da­tion che si focalizza sulla rie­la­bo­ra­zio­ne di flussi di dati. Il progetto è nato nel 2011 a opera di LinkedIn, l’azienda dell’omonimo social network pro­fes­sio­na­le, con lo scopo di svi­lup­pa­re una coda di messaggi (message queue). Dalla sua pub­bli­ca­zio­ne con licenza libera (Apache 2.0), il software ha de­ci­sa­men­te ampliato le sue funzioni e da una semplice ap­pli­ca­zio­ne per la coda si è tra­sfor­ma­to in un’ef­fi­cien­te piat­ta­for­ma di streaming dalle numerose fun­zio­na­li­tà, uti­liz­za­ta anche da aziende famose come Netflix, Microsoft o Airbnb.

Nel 2014 gli svi­lup­pa­to­ri 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 ag­giun­ti­ve, in parte gratuite e in parte a pagamento.

Quali sono le funzioni di base di Apache Kafka?

Apache Kafka ha lo scopo prin­ci­pa­le di ot­ti­miz­za­re la tra­smis­sio­ne e l’ela­bo­ra­zio­ne di flussi di dati che vengono scambiati tramite il col­le­ga­men­to diretto tra de­sti­na­ta­rio e fonte di dati. Kafka agisce come un’istanza di mes­sag­gi­sti­ca tra mittente e de­sti­na­ta­rio e offre soluzioni alle tipiche dif­fi­col­tà che possono insorgere in questo tipo di col­le­ga­men­ti. In questo modo la piat­ta­for­ma è anche in grado di risolvere il problema della mancata me­mo­riz­za­zio­ne tem­po­ra­nea di dati o messaggi, quando il de­sti­na­ta­rio (ad esempio a causa di problemi di rete) non è di­spo­ni­bi­le.

In più una coda Kafka ben con­fi­gu­ra­ta impedisce un so­vrac­ca­ri­co del de­sti­na­ta­rio da parte del mittente. Questo avviene sempre quando le in­for­ma­zio­ni devono essere inviate in maniera più rapida tramite col­le­ga­men­to diretto, per essere ricevute ed elaborate. Inoltre il software Kafka è adatto anche nel caso in cui il sistema target dovesse ricevere il messaggio, ma col­las­sas­se durante il processo di ela­bo­ra­zio­ne. Mentre nor­mal­men­te il mittente, no­no­stan­te il collasso, potrebbe credere che l’ela­bo­ra­zio­ne sia andata a buon fine, con Apache Kafka riceverà una notifica dell’errore.

Rispetto ai servizi che ge­sti­sco­no solo la coda dei messaggi come le banche dati, Apache Kafka è tol­le­ran­te agli errori e questo crea nel software le premesse per un’ela­bo­ra­zio­ne continua di messaggi, ossia di dati. In com­bi­na­zio­ne con un’alta sca­la­bi­li­tà e la pos­si­bi­li­tà di di­stri­bui­re le in­for­ma­zio­ni tra­spor­ta­te a piacere su molti sistemi (log delle tran­sa­zio­ni di­stri­bui­to), Apache Kafka è un’ec­cel­len­te soluzione per tutti quei servizi che devono garantire un sal­va­tag­gio e un’ela­bo­ra­zio­ne rapida dei dati nonché un'alta di­spo­ni­bi­li­tà.

L'ar­chi­tet­tu­ra di Apache Kafka in breve

Apache Kafka viene eseguito come cluster su uno o più server, che possono com­pren­de­re diversi centri di calcolo. I singoli nodi di un cluster, de­no­mi­na­ti broker, salvano e ca­te­go­riz­za­no i flussi di dati in entrata nei co­sid­det­ti topic. Qui vengono suddivisi in par­ti­zio­ni, replicati e di­stri­bui­ti nel cluster e con­tras­se­gna­ti con una marca temporale. In questo modo la piat­ta­for­ma di streaming ga­ran­ti­sce un’alta di­spo­ni­bi­li­tà e un accesso rapido. Apache Kafka dif­fe­ren­zia i topic in “normal topic” e “compacted topic”. Nei normal topic Kafka può can­cel­la­re i messaggi una volta superato il periodo o il limite di sal­va­tag­gio, mentre le voci contenute nei compacted topic non hanno alcun limite, né di tempo né di spazio.

Le ap­pli­ca­zio­ni che scrivono dati in un cluster di Kafka vengono definiti pro­dut­to­ri, mentre tutte le ap­pli­ca­zio­ni che leggono i dati di un cluster di Kafka si de­fi­ni­sco­no invece con­su­ma­to­ri. La com­po­nen­te centrale da cui attingono i pro­dut­to­ri e i con­su­ma­to­ri per l’ela­bo­ra­zio­ne di flussi di dati è una bi­blio­te­ca Java chiamata Kafka Streams. Il supporto di una scrittura tran­sa­zio­na­le ga­ran­ti­sce 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 bi­blio­te­ca Java Kafka Streams è la soluzione standard con­si­glia­ta per l’ela­bo­ra­zio­ne di dati nei cluster di Kafka. Ma è anche possibile usare Apache Kafka per l’ela­bo­ra­zio­ne e lo streaming con altri sistemi.

Basi tecniche: le in­ter­fac­ce di Kafka

Per garantire alle ap­pli­ca­zio­ni l’accesso ad Apache Kafka, il software offre cinque diverse in­ter­fac­ce chiave:

  • Kafka Producer: l’in­ter­fac­cia Producer permette alle ap­pli­ca­zio­ni di inviare i flussi di dati ai broker di un cluster di Apache per ca­te­go­riz­zar­li e salvarli (nei topic già citati).
  • Kafka Consumer: at­tra­ver­so l’in­ter­fac­cia Consumer, i con­su­ma­to­ri di Apache Kafka ricevono l’accesso ai dati, salvati nei topic di un cluster.
  • Kafka Streams: l’in­ter­fac­cia Streams permette a un’ap­pli­ca­zio­ne di fungere da pro­ces­so­re di streaming, per tra­sfor­ma­re i flussi di dati in entrata in flussi di dati in uscita.
  • Kafka Connect: grazie all’in­ter­fac­cia Connect è possibile impostare pro­dut­to­ri e con­su­ma­to­ri riu­ti­liz­za­bi­li che collegano i topic di Kafka con le ap­pli­ca­zio­ni o le banche dati esistenti.
  • Kafka Ad­min­Client: l’in­ter­fac­cia “Ad­min­Client” offre una semplice am­mi­ni­stra­zio­ne e ispezione di un cluster di Kafka.

La co­mu­ni­ca­zio­ne tra ap­pli­ca­zio­ni del cliente e singoli server di un cluster di Kafka avviene mediante un semplice ma ef­fi­cien­te pro­to­col­lo in­di­pen­den­te dal lin­guag­gio di scrittura sulla base di un TPU. Di solito gli svi­lup­pa­to­ri mettono a di­spo­si­zio­ne un client Java per Apache Kafka, ma sono di­spo­ni­bi­li 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 sup­por­ta­re un’alta quantità di dati in scrittura e lettura. Per le in­ter­fac­ce già citate e l’elevata fles­si­bi­li­tà, sca­la­bi­li­tà e tol­le­ran­za agli errori, questo software open source risulta in­te­res­san­te per l’utilizzo con le ap­pli­ca­zio­ni più disparate. In par­ti­co­la­re, però, Apache Kafka risulta adatto ai seguenti scopi:

  • Pub­bli­ca­re e abbonarsi a flussi di dati: la storia del progetto open source è co­min­cia­ta proprio per uti­liz­za­re Apache Kafka come sistema di mes­sag­gi­sti­ca. Anche dopo l’am­plia­men­to delle sue funzioni, questo software funziona al meglio per la tra­smis­sio­ne di messaggi tramite un sistema di coda, ma è adatto anche alla tra­smis­sio­ne di messaggi tramite un broadcast.
  • Rie­la­bo­ra­re flussi di dati: grazie all’in­ter­fac­cia Stream le ap­pli­ca­zio­ni che devono reagire a de­ter­mi­na­ti eventi in tempo reale e ne­ces­si­ta­no perciò di rie­la­bo­ra­re flussi di dati nella maniera più rapida ed efficace possibile trovano in Apache Kafka un partner ef­fi­cien­te.
  • Salvare flussi di dati: è possibile uti­liz­za­re Apache Kafka anche come sistema di sal­va­tag­gio ripartito e tol­le­ran­te agli errori. Non fa dif­fe­ren­za se si vogliono salvare sul server 50 kilobyte o 50 terabyte di dati con­si­sten­ti.

Na­tu­ral­men­te tutti gli elementi indicati si possono combinare a pia­ci­men­to. Perciò Apache Kafka non solo salva i dati e li rende di­spo­ni­bi­li in ogni momento come una complessa piat­ta­for­ma di streaming, ma li elabora anche in tempo reale col­le­gan­do­li con tutte le ap­pli­ca­zio­ni e i sistemi de­si­de­ra­ti.

Pa­no­ra­mi­ca dei tipici casi d’uso di Apache Kafka:

  • Sistema di mes­sag­gi­sti­ca
  • We­ba­na­ly­tics
  • Sistema di sal­va­tag­gio
  • Pro­ces­so­re di streaming
  • Event sourcing
  • Analisi e gestione dei logfile
  • Soluzioni di mo­ni­to­rag­gio
  • Log delle tran­sa­zio­ni
Vai al menu prin­ci­pa­le