Skip to main content

Kafka

O Apache Kafka é uma plataforma de streaming distribuída que é usada para publicar e subscrever fluxos de dados, armazenar fluxos de dados e processar fluxos de dados em tempo real. Ele é projetado para lidar com grandes volumes de dados em tempo real de uma maneira altamente escalável.

Vantagens

  • Escalabilidade: O Kafka é altamente escalável e pode lidar com grandes volumes de dados em tempo real.
  • Durabilidade: O Kafka é altamente durável e pode armazenar grandes volumes de dados.
  • Alta disponibilidade: O Kafka é altamente disponível e pode lidar com falhas de hardware e software.
  • Desempenho: O Kafka é altamente eficiente e pode processar grandes volumes de dados em tempo real.
  • Confiabilidade: O Kafka é altamente confiável e pode garantir a entrega de mensagens em tempo real.
  • Flexibilidade: O Kafka é altamente flexível e pode ser usado em uma ampla variedade de cenários de streaming de dados.
  • Integração: O Kafka é altamente integrado e pode ser facilmente integrado com outras ferramentas e tecnologias.

Componentes e Arquitetura do Kafka

O Kafka opera com base em um modelo de publicação e subscrição. Ele armazena fluxos de registros em categorias denominadas "tópicos", e os dados são mantidos de forma distribuída e replicada por um conjunto de servidores chamados "brokers".

Brokers

  • Definição: Um broker é um servidor do Kafka que armazena dados e serve clientes (produtores e consumidores).
  • Cluster: Vários brokers trabalham juntos formando um cluster Kafka, garantindo a escalabilidade e a tolerância a falhas.

Tópicos e Partições

  • Tópicos: Um tópico é uma categoria ou um feed nomeado para o qual os registros são publicados. Tópicos no Kafka são multi-assinantes.
  • Partições: Cada tópico pode ser dividido em várias partições, permitindo o paralelismo tanto na leitura quanto na escrita.

Produtores e Consumidores

  • Produtores: Aplicações que publicam (escrevem) registros nos tópicos do Kafka.
  • Consumidores: Aplicações que leem registros de um ou mais tópicos.

Grupos de Consumidores

  • Funcionamento: Os consumidores são organizados em grupos para que cada registro seja entregue a um consumidor por grupo, facilitando a distribuição de leituras e a escalabilidade.

Fluxo de Dados

O fluxo de dados no Kafka segue da seguinte forma: os produtores enviam registros para os tópicos, que estão distribuídos em partições nos brokers. Os consumidores se inscrevem em tópicos (ou partições específicas) e leem esses registros.

Replicação e Tolerância a Falhas

  • Replicação: O Kafka replica partições entre brokers para garantir que os dados estejam disponíveis mesmo em caso de falha de um broker.
  • Líder e Réplicas: Cada partição tem um broker líder e zero ou mais réplicas. O líder gerencia todas as leituras e escritas da partição, enquanto as réplicas sincronizam-se com o líder.

Segurança e Autenticação

O Kafka oferece mecanismos para segurança de dados, incluindo autenticação via SASL/SSL, autorização através de ACLs e criptografia de dados em trânsito.

Diferenças entre Kafka e MQTT

O Apache Kafka e o MQTT são duas plataformas de streaming de dados que são usadas para publicar e subscrever fluxos de dados em tempo real. No entanto, existem algumas diferenças importantes entre o Kafka e o MQTT:

  • Escalabilidade: O Kafka é altamente escalável e pode lidar com grandes volumes de dados em tempo real, enquanto o MQTT é menos escalável e pode ter problemas de desempenho com grandes volumes de dados.
  • Durabilidade: O Kafka é altamente durável e pode armazenar grandes volumes de dados, enquanto o MQTT é menos durável e pode perder dados em caso de falha.
  • Alta disponibilidade: O Kafka é altamente disponível e pode lidar com falhas de hardware e software, enquanto o MQTT é menos disponível e pode ter problemas de disponibilidade.
  • Desempenho: O Kafka é altamente eficiente e pode processar grandes volumes de dados em tempo real, enquanto o MQTT é menos eficiente e pode ter problemas de desempenho.
  • Confiabilidade: O Kafka é altamente confiável e pode garantir a entrega de mensagens em tempo real, enquanto o MQTT é menos confiável e pode perder mensagens em caso de falha.

Caso de Uso no Projeto

No projeto, o Kafka desempenha um papel crucial na integração entre os microsserviços, facilitando uma comunicação assíncrona eficaz e a troca de mensagens entre os diversos componentes da aplicação. Ele é empregado tanto na publicação quanto na subscrição de eventos, o que permite que os microsserviços interajam de maneira eficiente e escalável. Assim, posicionado estrategicamente na cadeia de comunicação entre o IoT Core da AWS e o banco de dados, o Kafka se encarrega de receber os dados provenientes do IoT Core e de encaminhá-los ao banco de dados (MongoDB), assegurando tanto a integridade quanto a segurança desses dados.

Este processo se dá através de um fluxo bem definido, onde inicialmente uma fila de mensagens SQS armazena os dados enviados pelo IoT Core. Esta fila é então consumida por uma função Lambda designada como Consumer do Kafka. Após o processamento pela Lambda, os dados são enviados ao Confluent Kafka, que por sua vez, encaminha os dados ao banco de dados final. Desta maneira, o Kafka serve como um elo vital entre o IoT Core e o banco de dados, reforçando a integridade e segurança dos dados ao longo do processo.

Conclusão

A arquitetura do Kafka é projetada para fornecer alta throughput, escalabilidade, replicação, e uma plataforma robusta para streaming de dados. Compreender seus componentes e funcionamento é essencial para desenvolver aplicações eficazes que se integrem com o ecossistema Kafka. No projeto, o Kafka desempenha um papel fundamental na integração entre os microsserviços, permitindo uma comunicação assíncrona eficaz e a troca de mensagens entre os diversos componentes da aplicação. Assim, o Kafka é uma ferramenta poderosa para lidar com grandes volumes de dados em tempo real e garantir a integridade e segurança dos dados em um ambiente distribuído e escalável.