Este projeto é uma simulação de um sistema de votação em tempo real, utilizando Kafka, PostgreSQL e Streamlit. Ele demonstra como integrar diferentes tecnologias para processar e visualizar dados em tempo real.
- Visão Geral
- Arquitetura
- Tecnologias Utilizadas
- Pré-requisitos
- Instalação
- Execução
- Funcionalidades
- Como Funciona
- Licença
O projeto simula uma eleição onde:
- Produtores geram dados de votantes e os enviam para um tópico Kafka.
- Consumidores processam esses votantes, simulam votos e enviam os resultados para outro tópico Kafka.
- Banco de Dados armazena os dados dos votantes, candidatos e votos.
- Painel em Streamlit exibe em tempo real os resultados da eleição, podendo consumir dados diretamente do banco de dados ou do Kafka.
-
Producer (
producer.py
):- Gera dados de votantes usando a API
randomuser.me
. - Envia os dados para o tópico Kafka
voters_topic
. - Insere os votantes no banco de dados PostgreSQL.
- Gera dados de votantes usando a API
-
Consumer (
voting.py
):- Consome os votantes do tópico
voters_topic
. - Simula votos para os candidatos.
- Envia os votos para o tópico
votes_topic
. - Insere os votos no banco de dados PostgreSQL.
- Consome os votantes do tópico
-
Painel Streamlit (
streamlit-app.py
):- Exibe os resultados em tempo real.
- Pode consumir dados diretamente do banco de dados ou do Kafka.
- Oferece três telas:
- Painel de Eleições (consumindo do banco de dados).
- Monitoramento de Votantes.
- Painel via Kafka (consumindo diretamente do Kafka).
- Docker e Docker Compose instalados.
- Python 3.8+ instalado.
- Conexão à internet para baixar imagens Docker e dependências.
- Clone o repositório:
git clone https://github.com/bixtecnologia/kafka-tutorial.git
cd kafka-tutorial
- Crie um ambiente virtual e ative-o:
python -m venv venv
source venv/bin/activate # No Windows: venv\Scripts\activate
- Instale as dependências Python:
pip install -r requirements.txt
- Instale as dependências Python:
docker-compose up -d
Isso iniciará os contêineres do Kafka, Zookeeper, PostgreSQL e outros serviços necessários.
- Execute o produtor:
Em um terminal separado:
python producer.py
- Este script gerará votantes e os enviará para o Kafka e o banco de dados.
- Execute o consumidor de votos:
Em outro terminal:
python voting.py
- Este script consumirá votantes do Kafka, simulará votos e enviará os resultados para o Kafka e o banco de dados.
- Execute o aplicativo Streamlit:
Em outro terminal:
streamlit run streamlit-app.py
- Abra o navegador em http://localhost:8501 para visualizar o painel.
-
Painel de Eleições:
- Exibe em tempo real o total de votos, o candidato líder e estatísticas detalhadas.
- Consome dados do banco de dados.
-
Monitoramento de Votantes:
- Mostra um gráfico em tempo real do número de votantes sendo inseridos no banco de dados.
-
Painel via Kafka:
- Exibe os resultados da eleição consumindo dados diretamente do Kafka para atualizações instantâneas.
Produtor (producer.py
):
- Utiliza a API randomuser.me para gerar dados fictícios de votantes.
- Envia esses dados para o tópico
voters_topic
no Kafka. - Insere os votantes no banco de dados PostgreSQL.
Consumidor (voting.py
):
-
Consome os dados do tópico
voters_topic
. -
Simula votos aleatórios para os candidatos.
-
Envia os votos para o tópico
votes_topic
. -
Insere os votos no banco de dados PostgreSQL.
-
Aplicativo Streamlit:
-
Painel de Eleições:
- Conecta-se ao banco de dados e consulta os votos.
- Atualiza em intervalos regulares.
-
Painel via Kafka:
- Implementa um consumidor Kafka para receber votos em tempo real.
- Atualiza a interface instantaneamente à medida que novos votos chegam.
-
Desenvolvedor | ||
---|---|---|
Alvaro Justus | [email protected] |