Skip to main content

Introdução

Este tópico aborda a integração entre Apache Kafka e Hive MQ na nossa solução, principalmente em relação a coleta, processamento e armazenamento dos dados provenientes de sensores.

Kafka e Hive MQ

Hive MQ

Como já tratado na Sprint 2, o Hive MQ é um broker de mensageria MQTT altamente escalável e de baixa latência, facilitando a comunicação entre dispositivos conectados.

Kafka

O Apache Kafka é uma plataforma de streaming distribuída, utilizada para construir sistemas em tempo real e processamento de eventos. Tal tecnologia permite a publicação e subscrição de streams de registros, semelhante a um sistema de mensagens tradicional, mas com recursos adicionais, como a capacidade de armazenamento de dados por um período configurável.

O Kafka, em geral, oferece uma arquitetura escalável e de alta disponibilidade, abaixo explicamos de maneira resumida os principais conceitos:

  • Tópicos: canais de comunicação onde os dados são publicados e consumidos.
  • Produtores: responsáveis por enviar dados para os tópicos.
  • Consumidores: aplicativos ou sistemas que recebem e processam os dados dos tópicos.
  • Partições: os tópicos são divididos em partições para permitir a distribuição e o paralelismo no processamento.

No contexto do projeto, preferimos utilizar o Confluent Cloud que desempenha o papel fundamental na ingestão, armazenamento e processamento dos dados provenientes dos sensores.

Dessa maneira, os dados coletados pelos sensores são enviados para o Confluent Cloud por meio de produtores Kafka, garantindo com que os dados sejam armazenados de forma durável e distribuída em tópicos Kafka.

Além disso, o Confluent fornece conectores Kafka para integração fácil com o Metabase ou outras ferramentas de visualização de dados, fazendo com que os dados processados sejam enviados para o Metabase criando o nosso dashboard.

Integração Kafka e Hive MQ

A integração entre Apache Kafka e Hive MQ desempenha um papel crucial no fluxo de dados provenientes de sensores em um ambiente de IoT. Assim, essa integração possibilita a coleta eficiente de dados em tempo real, sua entrega confiável ao Kafka para processamento e posterior análise.

Configuração do Consumidor Kafka

No script '', é possível observar a configuração de um consumidor Kafka para receber mensagens do Hive MQ e encaminhá-las para o Kafka.

configMap := &ckafka.ConfigMap{
"bootstrap.servers": os.Getenv("CONFLUENT_BOOTSTRAP_SERVER_SASL"),
"sasl.mechanisms": "PLAIN",
"security.protocol": "SASL_SSL",
"sasl.username": os.Getenv("CONFLUENT_API_KEY"),
"sasl.password": os.Getenv("CONFLUENT_API_SECRET"),
"session.timeout.ms": 6000,
"group.id": "manu",
"auto.offset.reset": "latest",
}

Consumo de Mensagens

Após a configuração, o consumidor Kafka é utilizado para receber mensagens do tópico e processá-las conforme necessário.

for msg := range msgChan {
log.Printf("Message on %s: %s\n", msg.TopicPartition, string(msg.Value))

var result map[string]interface{}
err := json.Unmarshal(msg.Value, &result)
if err != nil {
log.Fatal(err)
}

// Aqui você pode processar os dados conforme necessário.
}

Fluxo de dados

O fluxo de dados inicia-se com a coleta de informações pelos sensores, os quais podem capturar uma ampla gama de dados, como temperatura, umidade, pressão, entre outros.

Dessa maneira, o Hive MQ atua como o broker MQTT responsável por receber os dados dos sensores, permitindo com que os dispositivos IoT publiquem dados em tópicos específicos, simplificando a comunicação entre os dispositivos e o broker, ou seja, os sensores coletam dados e os enviam para o Hive MQ.

Uma vez recebidos pelo Hive MQ, os dados são encaminhados para o Kafka por meio de um consumidor Kafka configurado para consumir mensagens do Hive MQ, tal consumidor utiliza a biblioteca confluent-kafka-go para se conectar ao Hive MQ e receber as mensagens.

Por fim, os dados são armazenados temporariamente e processados, para poderem ser guardados no banco de dados e exibidos no dashboard.