Apache Kafka

Apache Kafka
Logótipo
Apache Kafka
Desenvolvedor Apache Software Foundation
Plataforma Multiplataforma
Modelo do desenvolvimento Software Livre
Lançamento janeiro de 2011; há 13 anos
Versão estável 2.8.0 (19 de abril de 2021; há 3 anos)
Escrito em Scala, Java
Sistema operacional Multi-plataforma
Gênero(s) Processamento de streams, Message broker
Licença Apache License 2.0
Página oficial kafka.apache.org

Apache Kafka é uma plataforma open-source de processamento de streams desenvolvida pela Apache Software Foundation, escrita em Scala e Java. O projeto tem como objetivo fornecer uma  plataforma unificada, de alta capacidade e baixa latência para tratamento de dados em tempo real. Sua camada de armazenamento é, essencialmente, uma "fila de mensagens de publishers/subscribers maciçamente escalável projetada como um log de transações distribuído",[1] tornando-o altamente valioso para infra-estruturas corporativas que processam transmissão de dados. Além disso, Kafka se conecta a sistemas externos (para importação/exportação de dados) através do Kafka Connect e ainda fornece o Kafka Streams, uma biblioteca Java de processamento de fluxos.

O Apache Kafka foi originalmente desenvolvido pelo LinkedIn, e teve, posteriormente, seu código aberto no início de 2011. Em novembro de 2014, Jun Rao, Jay Kreps, e Neha Narkhede, que trabalharam com o Kafka no LinkedIn, criaram uma nova empresa chamada Confluent[2] com foco em Kafka. De acordo com um post no Quora de 2014, Kreps escolheu o nome do software, em referência ao autor Franz Kafka, porque ele é "um sistema otimizado para escrever", e ele gostava do trabalho de Kafka.[3]

O Apache Kafka é baseado no commit log, ele permite que os usuários inscrevam-se e publiquem dados para qualquer número de sistemas ou aplicações em tempo real. Exemplos de aplicações incluem o gerenciamento de correspondência entre passageiros e um condutor no Uber, fornecer análises e métricas em tempo real, além de realizar inúmeros serviços em tempo real para todo o LinkedIn.[4]

Arquitetura do Apache Kafka

[editar | editar código-fonte]
Visão geral do Kafka

O Kafka armazena mensagens por chave-valor que provêm de inúmeros processos arbitrários chamados de "produtores". Os dados podem, assim, ser particionados em diferentes "partições" e diferentes "tópicos". Dentro de uma partição, as mensagens são estritamente ordenadas pela sua posição (a posição de uma mensagem dentro de uma partição), e indexados e armazenados juntamente com suas data e hora. Outros processos chamados de "consumidores", podem ler mensagens de partições. Para o processamento de fluxos, o Kafka oferece a Streams API que permite criar aplicações Java que consomem dados do Kafka e escrevem esses resultados novamente no Kafka. O Apache Kafka também funciona com o processamento de fluxos de sistemas externos, tais como o Apache Apex, Apache Flink, Apache Spark, e o Apache Storm.

São quatro as principais APIs no Kafka:

  • Producer API– Permite que as aplicações publiquem fluxos de dados.
  • Consumer API– Permite que a aplicação assine tópicos e processe o fluxo de dados.
  • Connector API– Executa as API's de produtor e consumidor que podem vincular os tópicos para os aplicativos existentes.
  • Streams API– Esta API converte os fluxos de entrada para um fluxo de saída e produz o resultado.
  1. Monitoring Kafka performance metrics, Datadog Engineering Blog, acessado em 23 de Maio de 2016/
  2. Primack, Dan. «LinkedIn engineers spin out to launch 'Kafka' startup Confluent». fortune.com. Consultado em 2 de outubro de 2015 
  3. «What is the relation between Kafka, the writer, and Apache Kafka, the distributed messaging system?». Quora. Consultado em 12 de junho de 2017 
  4. «What is Apache Kafka». confluent.io. Consultado em 4 de maio de 2018