O que é Apache Kafka?
Apache Kafka é uma plataforma de mensagens de código aberto que foi desenvolvida para trabalhar com streaming de dados em tempo real para streaming distribuído, pipelining e reprodução de feeds de dados para operações rápidas e escaláveis.
O Kafka é uma solução baseada em broker que opera mantendo fluxos de dados como registros dentro de um cluster de servidores. Os servidores Kafka podem abranger vários centros de dados e fornecem persistência de dados, armazenando fluxos de registros (mensagens) em tópicos, em várias instâncias do servidor. Um tópico armazena registros ou mensagens como uma série de tuplas, uma sequência de objetos imutáveis em Python, que consistem em uma chave, um valor e um timestamp.
Casos de uso para Apache Kafka
O Apache Kafka é uma das soluções de mensagens de código aberto que mais crescem no mercado hoje. Isso se deve principalmente ao padrão de desenho de arquitetura que fornece um avançado mecanismo de perfilagem para sistemas distribuídos.
Desenvolvido especificamente para streaming de logs em tempo real, o Apache Kafka é ideal para aplicativos que precisam de:
- Troca confiável de dados entre componentes distintos
- Capacidade de dividir as cargas de trabalho de mensagens conforme mudança dos requisitos do aplicativo
- Streaming em tempo real para processamento de dados
- Suporte nativo para reprodução de dados/mensagens
Conceitos do Apache Kafka
Tópicos: Um tópico é um conceito bastante universal em mensagens de padrão publish-subscribe. No Apache Kafka e em outras soluções de mensagens, um tópico é uma abstração usada para mostrar interesse em um determinado fluxo de dados (série de registros/mensagens). Um tópico pode ser publicado e assinado, e é uma camada de abstração usada pelo aplicativo para mostrar interesse em um determinado fluxo de dados.
Partições: No Apache Kafka, os tópicos podem ser subdivididos em uma série de filas de pedido chamadas de partições. Essas partições são continuamente anexadas para formar um log de confirmação sequencial. No sistema Kafka, cada registro/mensagem é atribuído a um ID sequencial denominado offset, que é usado para identificar a mensagem ou registro na partição fornecida.
Persistência: Apache Kafka opera suportando um cluster de servidores que mantêm registros/mensagens de forma durável conforme eles são publicados. O cluster Kafka usa um tempo limite de retenção configurável para determinar por quanto tempo um determinado registro é mantido, independentemente do consumo. Enquanto o registro/mensagem estiver dentro do tempo limite de retenção, ele ficará disponível para consumo. Quando exceder o tempo limite de retenção, o registro/mensagem é excluído e o espaço é liberado.
Escalonamento de tópicos/partições: como o Apache Kafka opera como um cluster de servidores, os tópicos/partições podem ser escalados compartilhando a carga para cada servidor em um determinado tópico/partição. Esse compartilhamento de carga confere a cada servidor no cluster Kafka a capacidade de lidar com a distribuição e persistência de registros/mensagens em um determinado tópico/partição. Enquanto os servidores individuais tratam de toda a distribuição e persistência, todos os servidores replicam os dados, proporcionando tolerância a falhas e alta disponibilidade no caso de falha de um servidor. As partições são segmentadas entre servidores tendo um servidor eleito para ser o líder da partição e todos os outros servidores atuando como seguidores. O servidor que é o líder da partição lida com toda a distribuição e persistência (leituras/gravações) de dados e os seguidores fornecem serviços de replicação para tolerância a falhas.
Produtores: No Apache Kafka, o conceito de produtor não é diferente da maioria dos sistemas de mensagens. Um produtor de dados (registros/mensagens) define em qual tópico (fluxo de dados) um determinado registro/mensagem deve ser publicado. Como as partições são usadas para fornecer escalabilidade adicional, um produtor também pode definir em qual partição um determinado registro/mensagem é publicado. Os produtores não precisam definir uma determinada partição e, com isso, um estilo round-robin de balanceamento de carga entre as partições de tópico pode ser alcançado.
Consumidores: os consumidores no Apache Kafka, como na maioria dos sistemas de mensagens, são as entidades que processam registros/mensagens. Os consumidores podem ser configurados para trabalhar independentemente em cargas de trabalho individuais ou cooperativamente com outros consumidores com um determinado workload (balanceamento de carga). Os consumidores gerenciam como processam uma carga de trabalho com base no nome do grupo de consumidores. Usar um nome de grupo de consumidores permite que os consumidores sejam distribuídos em um único processo, em vários processos e até mesmo em vários sistemas. Usando nomes de grupos de consumidores, esses podem balancear a carga (vários consumidores com o mesmo nome de grupo de consumidores), o consumo de registro/mensagem em todo o conjunto de consumidores ou processar cada registro/mensagem (vários consumidores com nomes de grupos de consumidores distintos) exclusivamente onde cada consumidor assina um tópico/partição recebendo a mensagem para processamento.

Benefícios do Apache Kafka para os negócios
O Apache Kafka traz benefícios especiais a partir de seu design inovador. O Apache Kafka foi e é projetado com três requisitos principais:
- Fornecer um modelo de mensagem pub/sub para distribuição e consumo de dados
- Permitir o armazenamento de longo prazo de dados que podem ser acessados e reproduzidos ao longo do tempo
- Suportar a capacidade de acessar dados em tempo real para fornecer processamento de stream em tempo real
É aqui que o Apache Kafka realmente se destaca. Ao contrário de alguns sistemas de mensagens, ele não fornece todos os recursos para a transacionalidade ou diferentes modelos de distribuição. Ele se concentra em fornecer distribuição de dados para um modelo de pub/sub que oferece suporte ao processamento de stream.
Além disso, uma vez que foi projetado desde o início para fornecer armazenamento de dados de longo prazo e reprodução de dados, o Apache Kafka tem a capacidade de abordar a persis†ência dos dados, tolerância a falhas e reprodução de forma exclusiva. Isso é visto exclusivamente na forma como o Apache Kafka lida com a persistência da replicação de dados no cluster, escalabilidade ao permitir o compartilhamento de dados entre partições para aumentar o volume e carga de dados, e acesso de dados usando tópicos/partições, deslocamentos de dados e nomes de grupos de consumidores.
Por último, como o Apache Kafka foi desenvolvido para atuar como a camada de comunicação para processamento de logs em tempo real, ele se presta naturalmente a aplicativos de processamento de fluxo em tempo real. Isso torna o Apache Kafka ideal para aplicativos que aproveitam uma infraestrutura de comunicação que pode distribuir grandes volumes de dados em tempo real.
Funcionalidade contínua de mensagens e streaming: Ao lidarem com grandes volumes de dados, as mensagens podem fornecer uma vantagem significativa para as comunicações e escalabilidade em comparação com os modelos de comunicação entre sistemas legados. Combinando mensagens e funcionalidade de streaming, o Apache Kafka oferece uma capacidade única de publicar, assinar, armazenar e processar registros em tempo real.
Retenção de dados baseados em tempo para reprodução de dados: A capacidade do Apache Kafka de armazenar dados nativamente de forma persistente no disco em um cluster permite uma abordagem simples para tolerância a falhas. Quando combinado com a capacidade de recuperar dados armazenados em períodos de retenção baseados em tempo e acessar os dados com base em offsets sequenciais, o Apache Kafka oferece uma abordagem robusta para armazenamento e recuperação de dados em uma configuração de cluster.
Abordagem básica para processamento de stream: Ser capaz de mover dados com rapidez e eficiência é a chave para a interconectividade. O Apache Kafka fornece a base para mover dados perfeitamente, seja como registros, mensagens ou fluxos. Antes de inspecionar, transformar e aproveitar os dados, você precisa da capacidade de movê-los de um lugar para outro em tempo real, e o Apache Kafka fornece uma abordagem nativa para mover e armazenar dados em tempo real.
Suporte de integração nativa: Uma solução igual para todos nunca é uma boa abordagem, e o Apache Kafka fornece a capacidade nativa de expandir e crescer, fornecendo pontos de integração nativos usando a API Conector. Usando a API Apache Kafka Connector, os aplicativos podem se integrar a soluções de terceiros, outros sistemas de mensagens e aplicativos legados por meio de conectores pré-construídos ou ferramentas de código aberto, ou construir conectores propositadamente, dependendo das necessidades do aplicativo.
Colocando o Apache Kafka em ação
O Apache Kafka pode ser usado para vários tipos de aplicativos potencializando uma arquitetura orientada a eventos, desde a distribuição de mensagens em tempo real até eventos de streaming. Imagine, por exemplo, uma empresa de manufatura que está mudando para uma arquitetura orientada a eventos para ter uma maior automação, mais rastreamento e entrega mais rápida de produtos e serviços. Embora existam muitos componentes necessários para fornecer a arquitetura orientada a eventos de ponta a ponta, a comunicação é a base de como os eventos são transmitidos e processados. O Apache Kafka oferece a solução ideal para permitir a distribuição e streaming de dados de uma forma leve e distribuída. Com o Apache Kafka, os registros/mensagens do processo podem ser transmitidos para um ou vários aplicativos, gerando workloads adicionais à medida que o produto passa pelo processo de manufatura. Da mesma forma, notificações podem ser geradas e rastreadas conforme o produto é processado na linha de produção; anomalias podem ser detectadas e tratadas em tempo real, e não apenas no final do processo, em comparação com o processo manual. Finalmente, uma melhor experiência do consumidor pode ser oferecida por meio de uma visão detalhada sobre onde o produto está no processo de produção e como está sendo montado, testado e entregue.
No centro de todos esses aprimoramentos está o Apache Kafka, fornecendo o sistema nervoso para distribuição e comunicação de dados, além de proporcionar time to market mais rápido e custos reduzidos.