Deploy da aplicação
pedriamos utilizar o confuelce CLI para fazer o deploy da aplicação. entretanto o professor não conseguiu fazer o deploy da aplicação, então ele fez o deploy manualmente, sem zookeper.
A primeira parte consiste em rodar os componentes do Kafka: o zookeeper e um broker pelo menos. Uma das vantagens de usarmos Docker é que já existem imagens prontas, como fizemos para o nginx na seção anterior. Vamos usar duas aqui:
confluentinc/cp-zookeeper
confluentinc/cp-kafka
Essas são imagens oficiais criadas e mantidas pela Confluent, uma das principais contribuidoras do projeto, portanto podemos confiar.
docker run -d --rm --name zookeeper --network minharede -e ZOOKEEPER_CLIENT_PORT=2181 -e ZOOKEEPER_TICK_TIME=2000 confluentinc/cp-zookeeper:7.0.1
Veja como ele não vai encontrar a imagem localmente. Ele fará o download diretamente do Docker Hub
. Agora, suba um
broker, rodando o seguinte comando:
docker run -d --rm --name broker --network minharede -p 9092:9092 -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT='zookeeper:2181' -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 -e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 -e KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 confluentinc/cp-kafka:7.0.1
Atenção especial para o endereço localhost:9092
. Esse é o endereço onde nosso producer
vai encontrar o broker
(ele
vai rodar no host). E o endereço broker:29092
é onde o consumer vai encontrar o broker
(ele vai rodar no Docker
).
Teremos três contêineres Docker rodando, todos eles na rede chamada minharede, portanto eles podem se enxergar utilizando seus respectivos nomes de contêineres como hostnames.
-
Um deles vai rodar o zookeeper, com base na imagem cp-zookeeper. Ele só precisa ser acessado internamente, pois é um controlador de brokers. Portanto não precisamos publicar suas portas. Mas internamente, ele é acessível pela porta 2181.
-
Outro será um broker, com base na imagem cp-kafka. Ele vai acessar o zookeeper na porta 2181. Essa porta do zookeeper não foi publicada, mas é acessível dentro de minharede (basta usar o nome "zookeeper" como hostname).
-
Temos também o analisador de sentimentos, que é uma aplicação Python rodando em contêiner. Ele é o consumer Kafka nessa arquitetura.
-- explicar sobre clusters kubernets, orquestramento, e clusters de docker