8 minutos
O Apache Kafka é uma plataforma de fluxo de eventos de código aberto, distribuída e que processa dados em tempo real. O Kafka se destaca na compatibilidade com aplicações orientadas a eventos e na criação de pipelines de dados confiáveis, oferecendo baixa latência e entrega de dados de alto rendimento.
Atualmente, bilhões de fontes de dados produzem continuamente fluxos de informações, muitas vezes na forma de eventos, estruturas de dados fundamentais que registram qualquer ocorrência no sistema ou no ambiente.
Normalmente, um evento é uma ação que impulsiona outra ação como parte de um processo. Um cliente fazendo um pedido, escolhendo um assento em um voo ou enviando um formulário de inscrição são exemplos de eventos. Um evento não precisa envolver uma pessoa; por exemplo, o relatório de temperatura de um termostato conectado em um determinado momento também é um evento.
O fluxo de eventos oferece oportunidades para que as aplicações respondam instantaneamente a novas informações. As plataformas de dados de streaming, como o Apache Kafka, permitem que os desenvolvedores criem sistemas que consomem, processam e agem sobre os dados à medida que eles chegam, mantendo a ordem e a confiabilidade de cada evento.
O Kafka evoluiu para a plataforma de fluxo de eventos mais usada, capaz de realizar ingestão e processar trilhões de registros diariamente sem nenhum atraso perceptível no desempenho, para proporcionar compatibilidade com volumes escaláveis. Mais de 80% das organizações da Fortune 500 usam o Kafka, incluindo a Target, Microsoft, AirBnB e Netflix, para oferecer experiências dos clientes em tempo real e baseadas em dados.
Em 2011, o LinkedIn desenvolveu o Apache Kafka para atender à crescente necessidade da empresa por um sistema de alto rendimento e baixa latência, capaz de lidar com enormes volumes de dados de eventos em tempo real. Construído usando Java e Scala, o Kafka foi posteriormente disponibilizado como código aberto e doado à Apache Software Foundation.
Embora as organizações já tinham compatibilidade ou usavam sistemas tradicionais de filas de mensagens (por exemplo, o Amazon SQS da AWS), o Kafka introduziu uma arquitetura de sistema de mensagens fundamentalmente diferente.
Ao contrário das filas de mensagens convencionais, que excluem as mensagens após o consumo, o Kafka retém as mensagens por um período configurável, permitindo que vários consumidores leiam os mesmos dados de forma independente. Esse recurso torna o Kafka ideal para o fornecimento de mensagens e eventos, processamento de fluxos e criação de pipelines de dados em tempo real.
Atualmente, o Kafka se tornou o padrão de fato para fluxo de eventos em tempo real. Os setores que usam o Kafka incluem finanças, comércio eletrônico, telecomunicações e transporte, onde a capacidade de lidar com grandes volumes de dados de forma rápida e confiável é essencial.
O Kafka é uma plataforma distribuída; ele é executado como um cluster tolerante a falhas e altamente disponível que pode abranger vários servidores e até mesmo vários data centers.
O Kafka tem três recursos principais:
Os produtores (aplicações ou tópicos) gravam registros em tópicos denominados logs, que armazenam os registros na ordem em que ocorreram em relação uns aos outros. Em seguida, os tópicos são divididos em partições e distribuídos em um cluster de brokers (servidores) do Kafka.
Dentro de cada partição, o Kafka mantém a ordem dos registros e os armazena de forma duradoura em disco por um período de retenção configurável. Embora a ordem seja garantida dentro de uma partição, ela não é entre partições. Com base nas necessidades da aplicação, os consumidores podem ler de forma independente essas partições em tempo real ou a partir de um deslocamento específico.
O Kafka garante a confiabilidade por meio da replicação de partições. Cada partição tem um líder (em um broker) e um ou mais seguidores (réplicas) em outros brokers. Essa replicação ajuda a tolerar falhas de nó sem perda de dados.
Historicamente, o Kafka dependia do Apache ZooKeeper, um serviço de coordenação centralizado para brokers distribuídos. O ZooKeeper garantia que os brokers do Kafka permanecessem sincronizados, mesmo se alguns brokers falhassem. Em 2011, o Kafka lançou o modo KRaft (Kafka Raft Protocol), eliminando a necessidade do ZooKeeper ao consolidar essas tarefas nos próprios brokers do Kafka. Essa mudança reduz dependências externas, simplifica a arquitetura e torna os clusters do Kafka mais tolerantes a falhas e mais fáceis de gerenciar e escalar.
Os desenvolvedores podem aproveitar os recursos do Kafka por meio de quatro interfaces de programação de aplicativos (APIs) primárias:
A API Producer permite que uma aplicação publique um fluxo em um tópico do Kafka. Depois que um registro é gravado em um tópico, ele não pode ser alterado ou excluído. Em vez disso, ele permanece no tópico por um período de tempo pré-configurado, por dois dias ou até que o espaço de armazenamento se esgote.
A API Consumer permite que uma aplicação inscreva-se em um ou mais tópicos e ingira e processe o fluxo armazenado no tópico. Pode trabalhar com registros no tópico em tempo real ou ingerir e processar registros passados.
Essa API se baseia nas APIs Producer e Consumer e adiciona recursos de processamento complexos que permitem que uma aplicação realize processamento front-to-backstream contínuo. Especificamente, a API Streams envolve o consumo de registros de um ou mais tópicos, sua análise, agregação ou transformação conforme a necessidade e a publicação dos fluxos resultantes nos mesmos tópicos ou outros tópicos.
Embora as APIs Producer e Consumer possam ser usadas para processamento simples de fluxos, a API Streams permite o desenvolvimento de aplicações de fluxos de dados e eventos mais sofisticadas.
Essa API permite que os desenvolvedores criem conectores, que são produtores ou consumidores reutilizáveis que simplificam e automatizam a integração de uma fonte de dados em um cluster do Kafka.
Os desenvolvedores usam o Kafka principalmente para criar dois tipos de aplicações:
Aplicações projetadas especificamente para migrar milhões e milhões de dados ou registros de eventos entre sistemas empresariais, em escala e em tempo real. Os aplicativos devem migrá-los de forma confiável, sem risco de corrupção, duplicação de dados ou outros problemas que normalmente ocorrem ao migrar volumes tão grandes de dados em alta velocidade.
Por exemplo, instituições financeiras usam o Kafka para transmitir milhares de transações por segundo em gateways de pagamentos, serviços de detecção de fraude e sistemas contábeis, garantindo fluxo de dados preciso e em tempo real, sem duplicação ou perda.
Aplicações orientadas por fluxos de registros ou event streams e que geram fluxos próprios. No mundo impulsionado digitalmente, encontramos esses aplicativos todos os dias.
Os exemplos incluem sites de comércio eletrônico que atualizam a disponibilidade dos produtos em tempo real ou plataformas que oferecem conteúdo personalizado e anúncios com base na atividade do usuário em tempo real. O Kafka impulsiona essas experiências ao transmitir as interações do usuário diretamente em mecanismos de análise de dados e recomendação.
O Kafka integra-se a várias outras tecnologias, muitas das quais fazem parte da Apache Software Foundation (ASF). As organizações normalmente usam essas tecnologias em arquiteturas orientadas a eventos maiores, processamento de fluxos ou soluções de análise de dados de big data.
Algumas dessas tecnologias são de código aberto, enquanto o Confluent, uma plataforma criada em torno do Kafka, oferece funcionalidades de nível empresarial e serviços gerenciados para processamento de dados em tempo real em escala. Empresas como a IBM, Amazon Web Services e outras oferecem soluções baseadas no Kafka (por exemplo, IBM Event Streams, Amazon Kinesis) que se integram ao Kafka para fluxo de eventos escalável.
O ecossistema Apache Kafka inclui:
O Apache Spark é um analytics engine para processamento de dados em grande escala. Você pode usar o Spark para realizar análises em fluxos entregues pelo Apache Kafka e para produzir aplicações de processamento de fluxos em tempo real, como análise de fluxos de cliques.
O Apache NiFi é um sistema de gerenciamento de fluxos de dados com uma interface visual de arrastar e soltar. Como o NiFi pode funcionar como produtor e consumidor do Kafka, é uma ferramenta ideal para gerenciar desafios de fluxos de dados com os quais o Kafka não consegue lidar.
O Apache Flink é um mecanismo para realizar cálculos em grande escala em event streams com alta velocidade e baixa latência consistentemente. O Flink pode ingerir fluxos como consumidor do Kafka, realizar operações em tempo real com base nesses fluxos e publicar os resultados para o Kafka ou outra aplicação.
O Apache Hadoop é um framework de software distribuído que permite armazenar enormes quantidades de dados em um cluster de computadores para uso em análise de dados de big data, aprendizado de máquina, mineração de dados e outras aplicações baseadas em dados que processam dados estruturados e dados não estruturados. O Kafka geralmente é usado para criar um pipeline de dados de streaming em tempo real para um cluster do Hadoop.
O Apache Camel é um framework de integração com um mecanismo de roteamento e mediação baseado em regras. Ele é compatível com o Kafka como componente, permitindo a fácil integração de dados com outros sistemas (por exemplo, bancos de dados, filas de mensagens), permitindo que o Kafka se torne parte de uma arquitetura orientada por eventos maior.
O Apache Cassandra é um banco de dados NoSQL altamente escalável, projetado para manipular grandes quantidades de dados em vários servidores comuns sem nenhum ponto único de falha.
Kafka normalmente é usado para transmitir dados para o Cassandra para ingestão de dados em tempo real e para criar aplicações escaláveis e tolerantes a falhas.
O RabbitMQ é um broker de mensagens popular de código aberto que permite que aplicações, sistemas e serviços se comuniquem por meio da tradução de protocolos de mensagens. Como o Kafka começou como um broker de mensagens (e ainda pode ser usado como um) e o RabbitMQ é compatível com um modelo de mensagens de publicação/inscrição (entre outros), o Kafka e o RabbitMQ são frequentemente comparados como alternativas. No entanto, eles servem a finalidades diferentes e são projetados para lidar com vários tipos de casos de uso. Por exemplo, os tópicos do Kafka podem ter vários inscritos, enquanto cada mensagem do RabbitMQ pode ter apenas um. Além disso, os tópicos do Kafka são duráveis, enquanto as mensagens do RabbitMQ são excluídas depois de consumidas.
Ao escolher entre eles, é essencial considerar as necessidades específicas de sua aplicação, como rendimento, durabilidade das mensagens e latência. O Kafka é adequado para fluxo de eventos em grande escala, enquanto o RabbitMQ se destaca em cenários que exigem roteamento flexível de mensagens e processamento de baixa latência.
A integração do Apache Kafka e da IA de código aberto transforma a maneira como as organizações lidam com dados em tempo real e inteligência artificial. Quando combinado com ferramentas de IA de código aberto, o Kafka permite que a aplicação de modelos de IA pré-treinados crie dados, apoiando a tomada de decisão em tempo real e a automação.
A IA de código aberto tornou a inteligência artificial mais acessível, e o Kafka fornece a infraestrutura necessária para processar dados em tempo real. Essa configuração elimina a necessidade de processamento em lote, permitindo que as empresas atuem com base nos dados imediatamente após sua produção.
Por exemplo, uma empresa de comércio eletrônico pode usar o Kafka para transmitir interações com clientes, como cliques ou visualizações de produtos, à medida que elas acontecem. Modelos de IA pré-treinados processam esses dados em tempo real, fornecendo recomendações personalizadas ou ofertas direcionadas. O Kafka gerencia o fluxo de dados, enquanto os modelos de IA se adaptam com base nos dados recebidos, melhorando o engajamento do cliente.
Ao combinar o processamento de dados em tempo real com modelos de IA, as organizações podem tomar decisões mais rápidas em detecção de fraude, manutenção preditiva ou preços dinâmicos, permitindo sistemas mais responsivos e eficientes.