Cos'è Apache Kafka?
Apache Kafka è una piattaforma di messaggistica open-source publish-subscribe che è stata costruita appositamente per gestire lo streaming dei dati in tempo reale per lo streaming, il pipelining e il replay distribuiti di feed di dati per operazioni veloci e scalabili.
Kafka è una soluzione basata su broker che opera mantenendo flussi di dati come record all'interno di un cluster di server. I server Kafka possono estendersi su più centri elaborazione dati e fornire la persistenza dei dati memorizzando flussi di record (messaggi) su più istanze di server in argomenti. Un argomento memorizza record o messaggi come una serie di tuple, una sequenza di oggetti Python immutabili, che consistono in un codice, un valore e un timestamp.
Casi d'uso per Apache Kafka
Apache Kafka è una delle soluzioni di messaggistica open source in più rapida crescita sul mercato oggi. Ciò è dovuto principalmente al modello di progettazione architetturale che fornisce un meccanismo di log superiore per i sistemi distribuiti.
Essendo costruita appositamente per lo streaming di log in tempo reale, Apache Kafka è ideale per le applicazioni che necessitano:
- Scambi di dati affidabili tra componenti diversi
- Capacità di partizionare i carichi di lavoro di messaggistica al variare dei requisiti dell'applicazione
- Streaming in tempo reale per l'elaborazione dei dati
- Supporto nativo per la riproduzione di dati/messaggi
Concetti di Apache Kafka
Topic: un topic è un concetto piuttosto universale nella messaggistica publish/subscribe. In Apache Kafka e in altre soluzioni di messaggistica, un topic è un'astrazione indirizzabile usata per mostrare interesse in un dato flusso di dati (serie di record/messaggi). Un topic può essere pubblicato e sottoscritto, ed è un livello di astrazione che viene utilizzato dall'applicazione per mostrare interesse in un dato flusso di dati.
Partitions: In Apache Kafka, i topic possono essere suddivisi in una serie di code d'ordine chiamate partizioni. Queste partizioni sono continuamente aggiunte per formare un registro di commit sequenziale. Nel sistema Kafka, ad ogni record/messaggio è assegnato un ID sequenziale chiamato offset che è usato per identificare il messaggio o il record nella determinata partizione.
Persistenza: Apache Kafka opera mantenendo un cluster di server che mantengono in modo duraturo i record/messaggi mentre vengono pubblicati. Il cluster di Kafka usa un timeout di mantenimento configurabile per determinare per quanto tempo un dato record viene mantenuto indipendentemente dal consumo. Mentre il record/messaggio è all'interno del timeout di mantenimento, esso è disponibile per il consumo. Una volta che il record/messaggio supera questo timeout di ritenzione, il record/messaggio viene cancellato e lo spazio viene liberato.
Scalare topic/partizioni: poiché Apache Kafka opera come un cluster di server, i topic/le partizioni possono essere scalati condividendo il carico di ogni server su un dato topic/partizione. Questa condivisione del carico offre a ogni server nel cluster di Kafka la capacità di gestire la distribuzione e la persistenza dei record/messaggi su un dato topic/partizione. Mentre i singoli server gestiscono tutta la distribuzione e la persistenza, tutti i server replicano i dati fornendo tolleranza di errore e alta disponibilità nel caso in cui un server non funzioni. Le partizioni sono segmentate tra i server che hanno un server scelto per essere il leader della partizione e tutti gli altri server che agiscono come seguaci. Il server che è il leader della partizione gestisce tutta la distribuzione e la persistenza (lettura/scrittura) dei dati e i seguaci forniscono servizi di replica per la tolleranza agli errori.
Producers: in Apache Kafka, il concetto di produttore non è diverso dalla maggior parte dei sistemi di messaggistica. Un produttore di dati (record/messaggi) definisce su quale topic (flusso di dati) un dato record/messaggio dovrebbe essere pubblicato. Poiché le partizioni sono utilizzare per fornire ulteriore scalabilità, un produttore può anche definire su quale partizione un dato record/messaggio viene pubblicato. I produttori non devono definire una data partizione e, non definendo una partizione, si può ottenere un bilanciamento del carico in stile round-robin tra le partizioni dei topic.
Consumatori: i consumatori in Kafka, come nella maggior parte dei sistemi di messaggistica, sono le entità che elaborano i record/messaggi. I consumatori possono essere configurati per lavorare indipendentemente su carichi di lavoro individuali o in modo collaborativo con altri consumatori su un dato carico di lavoro (bilanciamento del carico). I consumatori gestiscono il modo in cui elaborano un carico di lavoro in base al nome del loro gruppo di consumatori. L'utilizzo di un nome di gruppo di consumatori permette agli stessi di essere distribuiti all'interno di un singolo processo, tra più processi e anche tra più sistemi. Usando i nomi dei gruppi di consumatori, questi ultimi possono sia bilanciare il carico (più consumatori con lo stesso nome di gruppo di consumatori) del consumo di record/messaggi attraverso l'insieme dei consumatori, sia elaborare ogni record/messaggio in modo unico (più consumatori con nomi di gruppi di consumatori univoci) dove ogni consumatore iscritto a un argomento/una partizione riceve il messaggio per l'elaborazione.

Vantaggi di business di Apache Kafka
Apache Kafka presenta alcuni vantaggi significativi grazie agli obiettivi di progettazione per i quali è stato creato. Apache Kafka è progettato con tre requisiti e finalità principali:
- Fornire un modello di messaggistica publish/subscribe per la distribuzione e il consumo dei dati
- Consentire l'archiviazione a lungo termine dei dati che possono essere consultati e riprodotti nel tempo
- Supportare la capacità di accedere ai dati in tempo reale per fornire l'elaborazione del flusso in tempo reale
È qui che Apache Kafka brilla veramente. A differenza di alcuni sistemi di messaggistica, non fornisce tutti i fronzoli per la transazionalità o diversi modelli di distribuzione. Si concentra sul fornire la distribuzione dei dati per un modello publish/subscribe che supporta l'elaborazione dei flussi.
In secondo luogo, poiché è stato progettato da zero per fornire l'archiviazione dei dati a lungo termine e la riproduzione degli stessi, Apache Kafka ha la capacità di affrontare la persistenza dei dati, la tolleranza ai guasti e la riproduzione in modo univoco. Questo si nota in particolare nel modo in cui Apache Kafka gestisce la persistenza della data repliction nel cluster e la scalabilità consentendo la condivisione dei dati tra le partizioni per l'aumento dei volumi di dati e del carico, e l'accesso ai dati utilizzando topic/partizioni, offset di dati e nomi di gruppi di consumatori.
Infine, poiché Apache Kafka è stato originariamente progettato per agire come livello di comunicazione per l'elaborazione dei log in tempo reale, si presta naturalmente alle applicazioni di elaborazione dei flussi in tempo reale. Ciò rende Apache Kafka ideale per le applicazioni che sfruttano un'infrastruttura di comunicazione che può distribuire alti volumi di dati in tempo reale.
Funzionalità di messaggistica e streaming senza soluzione di continuità: quando si ha a che fare con grandi volumi di dati, la messaggistica è in grado di fornire un vantaggio significativo alle comunicazioni e alla scalabilità rispetto ai modelli di comunicazione tradizionali. Fondendo la messaggistica e la funzionalità di streaming, Apache Kafka fornisce una capacità unica di pubblicare, sottoscrivere, memorizzare ed elaborare record in tempo reale.
Conservazione dei dati basata sul tempo per la riproduzione dei dati: la capacità di Apache Kafka di memorizzare nativamente i dati in modo persistente su disco in un cluster permette un approccio semplice alla tolleranza agli errori. Quando si combina con la capacità di richiamare i dati memorizzati in base a periodi di conservazione basati sul tempo e di accedere ai dati in base a offset sequenziali, Apache Kafka offre un approccio solido alla memorizzazione e al recupero dei dati in una configurazione di cluster.
Approccio fondamentale per l'elaborazione dei flussi: essere in grado di spostare i dati in modo veloce ed efficiente è la chiave per l'interconnettività. Apache Kafka fornisce le basi per spostare i dati senza soluzione di continuità sia come record, messaggi o flussi. Prima di poter ispezionare, trasformare e sfruttare i dati, è necessaria la capacità di spostarli da un posto all'altro in tempo reale, e Apache Kafka fornisce un approccio nativo per spostare e memorizzare i dati in tempo reale.
Supporto per l'integrazione nativa: un approccio univoco non è mai l'ideale e Apache Kafka fornisce la capacità nativa di espandersi e crescere fornendo punti di integrazione nativi utilizzando Connector API. Utilizzando Connector API di Apache Kafka, le applicazioni possono integrarsi con soluzioni di terze parti, altri sistemi di messaggistica e applicazioni legacy sia attraverso connettori pre-costruiti o strumenti open source, sia creando appositamente connettori a seconda delle esigenze dell'applicazione.
Avviare Apache Kafka
Apache Kafka può essere utilizzato per numerosi tipi di applicazioni per alimentare una event-driven architecture, dalla distribuzione di messaggi in tempo reale allo streaming di eventi. Prendiamo ad esempio un'azienda manifatturiera che sta passando a una event-driven architecture per fornire più automazione, più tracciabilità e un'erogazione più veloce di prodotti e servizi. Mentre ci sono molti componenti necessari per fornire la event-driven architecture end-to-end, la comunicazione è alla base del modo in cui gli eventi vengono trasmessi ed elaborati. Apache Kafka fornisce la soluzione ideale per abilitare la distribuzione e lo streaming dei dati in modo leggero e distribuito. Con Apache Kafka, i record/messaggi di processo possono essere trasmessi in streaming a una o più applicazioni che guidano carichi di lavoro aggiuntivi mentre il prodotto viene spostato attraverso il processo di produzione. Allo stesso modo, le notifiche possono essere generate e tracciate mentre il prodotto viene elaborato attraverso la linea di produzione; le anomalie possono essere catturate e gestite in tempo reale rispetto al processo manuale che catturava le eccezioni solo alla fine del processo. Infine, può essere offerta una migliore esperienza del consumatore fornendo una visione dettagliata del luogo in cui si trova il prodotto nel processo di produzione e di come il prodotto viene assemblato, testato e consegnato.
Al centro di tutti questi miglioramenti c'è Apache Kafka, che fornisce il "sistema nervoso" per la distribuzione e la comunicazione dei dati, oltre a offrire un maggiore time to market e costi ridotti.