Esse módulo é uma Stack de Streaming usando Spark + Kafka. Ele utiliza o Spark para ler constantemente dados do Kafka, processá-los e criar registros utilizando Delta Lake.
Há 4 arquivos principais:
- kafka-consumer.py: Consome uma mensagem do Kafka e imprime ela na tela.
- kafka-prod.py: Produz mensagens para o Kafka.
- spark-kafka.py: Escuta um tópico no Kafka, trata os dados e cria uma Delta Table.
- main.ipynb: Notebook utilizado para testes.
Para utilizar essa Stack, é necessário fazer o Setup do ambiente completo.
Observação:
- Esse setup é feito para ambientes Linux
- Esse setup assume que você usará o Spark localmente
Primeiro, é necessário baixar o Apache Spark. Para isso execute o seguinte comando no terminal:
wget https://dlcdn.apache.org/spark/spark-4.0.1/spark-4.0.1-bin-hadoop3.tgz
Com isso, você terá obtido os binários do Apache Spark, em um arquivo .tgz. Depois execute:
tar -xvzf spark-4.0.1-bin-hadoop3.tgz
E você terá extraído o arquivo para um diretório. O nome do arquivo pode variar, caso a sua instalação seja diferente troque o nome do arquivo .Depois, você precisa criar a Home do Spark. Podendo ser feito da seguinte forma:
mv spark-4.0.1-bin-hadoop3 ~/spark
Esse comando move o diretório para o diretório no caminho especificado. Então a pasta spark-4.0.1-bin-hadoop3 estará na HOME do seu sistema operacional renomeado como spark.
Pronto! Agora todas as dependências do Spark foram instaladas e configuradas.
Para instalarmos o Java, podemos utilizar o gerenciador de pacotes do Sistema Operacional:
Para distribuições tipo Debian use sudo apt install openjdk-17-jdk, para outras distribuições baseadas em Fedora utilize sudo dnf install java-17-openjdk-devel.
Depois verifique se o Java foi instalado corretamente: java --version.
Caso ele imprima no terminal o número da sua versão e outras informações isso significa que o Java foi instalado corretamente. Se quiser garantir que o seu programa irá conseguir encontrar a HOME do Java (na maioria dos casos não é necessário), então prossiga executando:
which java
Esse comando irá dizer qual é o caminho do Java que está sendo utilizado. Anote esse caminho e coloque no código python como variável de ambiente.
import os
os.environ["JAVA_HOME"] = "caminho/retornado/pelo/comando"Para fazer o setup do Kafka é bem simples. Basta estar no diretório do repositório (Ou no diretório onde o arquivo docker-compose.yaml se encontra) e executar o comando docker compose up -d que ele irá colocar as imagens do Kafka, do ZooKeeper e da UI no ar.
Caso queira executar em um ambiente de produção, basta ir no diretório prod/, editar o arquivo spark-example.py, criar a imagem usando docker build -t minha-imagem . e a imagem com o Spark já estará pronta.
Agora basta ir no diretório onde docker-compose.yaml está e execute docker compose up -d para que o Kafka esteja ativo.
Como executar o container Spark:
# Modo 1:
docker run -it --rm \
-v $(pwd)/spark-example.py:/app/spark-example.py \
job-spark \
spark-submit /app/spark-example.py
# Modo 2 (Se não setar um volume no script):
docker run -d --rm \
job-spark \
spark-submit /app/spark-example.py