O que é Kafka?
Apache Kafka é um armazenamento de dados distribuído otimizado para ingestão e processamento de dados de streaming em tempo real. Dados de transmissão são dados gerados continuamente por milhares de fontes de dados, que normalmente enviam os registros de dados simultaneamente. Uma plataforma de transmissão precisa lidar com esse fluxo constante de dados e processá-los de forma sequencial e incremental.
O Kafka fornece três funções principais para seus usuários:
- Publicar e assinar fluxos de registros
- Armazenar fluxos de registros de forma eficaz na ordem em que os registros foram gerados
- Processar fluxos de registros em tempo real
O Kafka é usado principalmente para criar pipelines de dados de streaming em tempo real e aplicações que se adaptam aos fluxos de dados. Ele combina mensagens, armazenamento e processamento de fluxo para permitir o armazenamento e a análise de dados históricos e em tempo real.
Para que é usado o Kafka?
O Kafka é usado para criar pipelines de dados de streaming em tempo real e aplicações de streaming em tempo real. Um pipeline de dados processa e move dados de um sistema para outro de forma confiável, e uma aplicação de streaming é uma aplicação que consome fluxos de dados. Por exemplo, se você quiser criar um pipeline de dados que receba dados de atividades do usuário para monitorar como as pessoas usam seu site em tempo real, o Kafka seria usado para ingerir e armazenar dados de streaming enquanto fornece leituras para os aplicações que alimentam o pipeline de dados. O Kafka também é frequentemente usado como uma solução de agente de mensagens, que é uma plataforma que processa e medeia a comunicação entre duas aplicações.
Como o Kafka funciona?
O Kafka combina dois modelos de mensagens, filas e publicação-assinatura, para fornecer os principais benefícios de cada um aos consumidores. O enfileiramento permite que o processamento de dados seja distribuído em várias instâncias do consumidor, tornando-o altamente escalável. No entanto, as filas tradicionais não têm vários assinantes. A abordagem de publicação-assinatura é de vários assinantes, mas como cada mensagem vai para cada assinante, ela não pode ser usada para distribuir o trabalho em vários processos. O Kafka usa um modelo de log particionado para unir essas duas soluções. Um log é uma sequência ordenada de registros, e esses registros são divididos em segmentos ou partições que correspondem a diferentes assinantes. Isso significa que pode haver vários assinantes do mesmo tópico e cada um recebe uma partição para permitir maior escalabilidade. Por fim, o modelo de Kafka fornece capacidade de reprodução, o que permite que várias aplicações independentes lendo fluxos de dados funcionem de forma independente em seu próprio ritmo.
Filas
Publicar e assinar
Quais são os benefícios da abordagem de Kafka?
Escalonável
O modelo de log particionado do Kafka permite que os dados sejam distribuídos em vários servidores, tornando-os escaláveis além do que caberia em um único servidor.
Rápido
O Kafka separa os fluxos de dados para que haja uma latência muito baixa, tornando-o extremamente rápido.
Resiliente
As partições são distribuídas e replicadas em vários servidores, e os dados são todos gravados em disco. Isso ajuda a proteger contra falhas no servidor, tornando os dados muito tolerantes a falhas e duráveis.
Como a arquitetura de Kafka integra diferentes modelos?
O Kafka corrige os dois modelos diferentes publicando registros sobre tópicos diferentes. Cada tópico tem um log particionado, que é um log de confirmação estruturado que acompanha todos os registros em ordem e anexa novos em tempo real. Essas partições são distribuídas e replicadas em vários servidores, permitindo alta escalabilidade, tolerância a falhas e paralelismo. Cada consumidor recebe uma partição no tópico, que permite vários assinantes enquanto mantém a ordem dos dados. Ao combinar esses modelos de mensagens, o Kafka oferece os benefícios de ambos. O Kafka também atua como um sistema de armazenamento muito escalável e tolerante a falhas, gravando e replicando todos os dados em disco. Por padrão, o Kafka mantém os dados armazenados no disco até ficarem sem espaço, mas o usuário também pode definir um limite de retenção. O Kafka possui quatro APIs:
- API do produtor: usada para publicar um fluxo de registros em um tópico do Kafka.
- API do consumidor: usada para assinar tópicos e processar seus fluxos de registros.
- API de fluxos: permite que as aplicações se comportem como processadores de fluxo, que captam um fluxo de entrada do(s) tópico(s) e o transformam em um fluxo de saída que vai para diferentes tópicos de saída.
- API do conector: permite que os usuários automatizem perfeitamente a adição de outra aplicação ou sistema de dados aos tópicos atuais do Kafka.
Quais são as diferenças entre Apache Kafka e RabbitMQ?
O RabbitMQ é um agente de mensagens de código aberto que usa uma abordagem de fila de mensagens. As filas são espalhadas por um cluster de nós e opcionalmente replicadas, com cada mensagem sendo entregue apenas a um único consumidor.
Características |
Apache Kafka |
RabbitMQ |
Arquitetura |
O Kafka usa um modelo de log particionado, que combina abordagens de fila de mensagens e assinatura de publicação. |
O RabbitMQ usa uma fila de mensagens. |
Escalabilidade |
O Kafka fornece escalabilidade ao permitir que as partições sejam distribuídas em diferentes servidores. |
Aumente o número de consumidores na fila para ampliar o processamento entre os consumidores concorrentes. |
Retenção de mensagens |
Com base em políticas, por exemplo, as mensagens podem ser armazenadas por um dia. O usuário pode configurar essa janela de retenção. |
Baseado em reconhecimento, o que significa que as mensagens são excluídas à medida que são consumidas. |
Diversos consumidores |
Diversos consumidores podem se inscrever no mesmo tópico, porque o Kafka permite que a mesma mensagem seja reproduzida por um determinado período. |
Não é possível que vários consumidores recebam a mesma mensagem, pois as mensagens são removidas à medida que são consumidas. |
Replicação |
Os tópicos são replicados automaticamente, mas o usuário pode configurar manualmente os tópicos para não serem replicados. |
As mensagens não são replicadas automaticamente, mas o usuário pode configurá-las manualmente para serem replicadas. |
Ordenação de mensagens |
Cada consumidor recebe as informações em ordem devido à arquitetura de log particionado. |
As mensagens são entregues aos consumidores na ordem em que eles chegam à fila. Se houver consumidores concorrentes, cada consumidor processará um subconjunto dessa mensagem. |
Protocolos |
O Kafka usa um protocolo binário via TCP. |
Protocolo avançado de fila de mensagens (AMQP) com suporte via plug-ins: MQTT, STOMP. |
Como a AWS pode oferecer suporte aos seus requisitos do Kafka?
Leia mais sobre como implantar manualmente o Kafka na AWS aqui.
A AWS também oferece o Amazon MSK, o serviço totalmente gerenciado mais compatível, disponível e seguro para o Apache Kafka, permitindo que os clientes preencham data lakes, transmitam alterações de e para bancos de dados e potencializem aplicações de análise e machine learning. Com o Amazon MSK, os clientes podem passar menos tempo gerenciando a infraestrutura e mais tempo criando aplicações. Saiba mais sobre o Amazon MSK.
Próximas etapas na AWS
Obtenha acesso instantâneo ao nível gratuito da AWS.