Apache Kafka è un sistema di messaggistica distribuito di pubblicazione-sottoscrizione che riceve i dati da diversi sistemi di origine e rende i dati disponibili ai sistemi di destinazione in tempo reale. Kafka è scritto in Scala e Java ed è spesso associato all'elaborazione del flusso di eventi in tempo reale per i big data.
Come altri sistemi di broker di messaggi, Kafka facilita lo scambio di dati asincrono tra processi, applicazioni e server. A differenza di altri sistemi di messaggistica, tuttavia, Kafka ha un sovraccarico molto basso perché non tiene traccia del comportamento dei consumatori ed elimina i messaggi che sono stati letti. Invece, Kafka conserva tutti i messaggi per un determinato periodo di tempo e rende il consumatore responsabile del monitoraggio dei messaggi che sono stati letti.
Il software Kafka viene eseguito su uno o più server e ogni nodo in un cluster Kafka è chiamato broker. Kafka utilizza Apache ZooKeeper per gestire i cluster; il compito del broker è aiutare le applicazioni del produttore a scrivere dati sugli argomenti e le applicazioni del consumatore leggere dagli argomenti. Gli argomenti sono suddivisi in partizioni per renderli più gestibili e Kafka garantisce un forte ordinamento per ogni partizione. Poiché i messaggi vengono scritti in una partizione in un ordine particolare e vengono letti nello stesso ordine, ciascuna partizione diventa essenzialmente un log di commit che può funzionare come un'unica fonte di verità (SSoT) per gli eventi di un sistema distribuito.
La base di codice di Kafka, che è stata originariamente sviluppata su LinkedIn per fornire un meccanismo per il carico parallelo nei sistemi Hadoop, è diventata un progetto open source sotto l'Apache Software Foundation nel 2011. Nel 2014, gli sviluppatori di LinkedIn che hanno creato Kafka hanno avviato una società chiamata Confluent per facilitare le distribuzioni di Kafka e supportare i prodotti Kafka-as-a-service di livello aziendale. La versione 5.0 di Confluent Platform, rilasciata commercialmente nel 2018, migliora la gestione del failover del client dell'applicazione per il ripristino di emergenza (DR) e riduce la dipendenza dal linguaggio di programmazione Java per le applicazioni di analisi del flusso di dati.