Apache Kafka é um sistema distribuído de mensagens de publicação e subscrição que recebe dados de diferentes sistemas fonte e torna os dados disponíveis para os sistemas alvo em tempo real. Kafka é escrito em Scala e Java e é frequentemente associado ao processamento de eventos em tempo real para grandes dados.
Como outros sistemas de corretores de mensagens, Kafka facilita a troca assíncrona de dados entre processos, aplicações e servidores. Ao contrário de outros sistemas de mensagens, no entanto, Kafka tem uma sobrecarga muito baixa porque não rastreia o comportamento do consumidor e elimina as mensagens que foram lidas. Em vez disso, Kafka retém todas as mensagens durante um determinado período de tempo e torna o consumidor responsável por rastrear quais mensagens foram lidas.
Kafka software roda em um ou mais servidores e cada nó de um cluster Kafka é chamado de corretor. Kafka usa o Apache ZooKeeper para gerenciar clusters; o trabalho do corretor é ajudar aplicações produtoras a escrever dados em tópicos e aplicações de consumo lidos a partir de tópicos. Os tópicos são divididos em partições para torná-los mais gerenciáveis e a Kafka garante uma forte ordenação para cada partição. Como as mensagens são escritas em uma partição em uma ordem específica e são lidas na mesma ordem, cada partição essencialmente se torna um log de commit que pode funcionar como uma única fonte de verdade (SSoT) para eventos de um sistema distribuído.
A base de código do Kafka, que foi originalmente desenvolvida no LinkedIn para fornecer um mecanismo de carga paralela em sistemas Hadoop, tornou-se um projeto de código aberto sob a Apache Software Foundation em 2011. Em 2014, os desenvolvedores do LinkedIn que criaram a Kafka criaram uma empresa chamada Confluent para facilitar as implementações Kafka e suportar produtos Kafka-como-um-serviço de nível empresarial. A versão 5.0 da Confluent Platform, que foi lançada comercialmente em 2018, melhora o tratamento de failover de clientes de aplicações para recuperação de desastres (DR) e reduz a dependência da linguagem de programação Java para aplicações analíticas de streaming de dados.