Instale e configure um ambiente Docker para executar o Apache Kafka localmente.
Apresentando o ecossistema Apache Kafka
O Apache Kafka¹ é uma plataforma de streaming de eventos distribuída de código aberto, usada por milhares de empresas para pipelines de dados de alta performance, análise de streaming, integração de dados e aplicações críticas.
O Apache Zookeeper² é um serviço centralizado para manter informações de configuração, nomes, fornecer sincronização distribuída e oferecer serviços de grupo a aplicações distribuídas. Ele é uma parte essencial do Kafka.
Este tutorial fornece os meios para executar o Kafka em uma arquitetura distribuída com um cluster de 3 nós para Brokers³. Além disso, o Zookeeper é configurado no modo replicated⁴ - chamado de ensemble - para aproveitar a arquitetura distribuída.
O código utilizado para criar este tutorial está disponível neste repositório, para que você possa acompanhar.
Contêinerização do Apache Kafka
Pré-requisitos
Para executar este ambiente, você precisará ter o Docker instalado e as ferramentas de linha de comando (CLI) do Kafka:
Este tutorial foi testado usando o Docker Desktop⁵ para macOS, com a versão do Engine 20.10.2.
As ferramentas de CLI podem ser baixadas aqui como um arquivo tar ou zip. Após o download ser concluído e os arquivos extraídos, você precisará adicioná-los à sua variável de ambiente PATH.
Se estiver usando o bash, edite o arquivo bash_profile disponível em ~/.bash_profile e adicione o seguinte: PATH=$PATH:~/bin/confluent-6.0.1/bin (Supondo que os arquivos foram extraídos para a localização ~/bin. Qualquer outra localização funcionará, desde que o caminho da variável de ambiente PATH esteja apontando para o caminho correto).
Se estiver usando o shell zsh, você precisará editar o arquivo ~/.zshrc.
Atualize o arquivo de hosts local. Execute o script update-hosts.sh para atualizar o arquivo /etc/hosts local e resolver o nome dos containers.
Imagem Docker
Foi decidido utilizar as imagens da Bitnami⁶ devido à sua abordagem pronta para uso, confiabilidade bem conhecida e por ser um contêiner non-root⁷.
Consulte a documentação oficial da Bitnami para mais informações:
Docker Compose
Um arquivo docker-compose⁸ é fornecido para criar o ambiente de desenvolvimento local.
Para iniciar o ambiente, execute:
docker-compose -f ./build/docker-compose.yml build
Configuração do Zookeeper
Os contêineres expõem apenas a porta do cliente de acordo com o contêiner:
zk-1:12181
zk-2:22181
zk-3:32181
Variáveis de Ambiente do Zookeeper
ALLOW_ANONYMOUS_LOGIN: Permite aceitar conexões de usuários não autenticados.
ZOO_SERVER_ID: ID do servidor no ensemble.
ZOO_SERVERS: Lista separada por vírgula, espaço ou ponto e vírgula de servidores.
ZOO_PORT_NUMBER: Porta do cliente do ZooKeeper.
ZOO_TICK_TIME: Unidade de tempo básica em milissegundos usada pelo ZooKeeper para heartbeat.
ZOO_INIT_LIMIT: O ZooKeeper usa para limitar o tempo que os servidores do ZooKeeper no quórum têm para se conectar a um líder.
ZOO_SYNC_LIMIT: Até que ponto um servidor pode estar desatualizado em relação a um líder.
ZOO_AUTOPURGE_PURGEINTERVAL: O intervalo de tempo em horas para o qual a tarefa de purge deve ser acionada.
ZOO_AUTOPURGE_SNAPRETAINCOUNT: número dos snapshots mais recentes e os respectivos logs de transação no dataDir e dataLogDir a serem mantidos.
ZOO_MAX_CLIENT_CNXNS: Limita o número de conexões simultâneas que um único cliente pode fazer com um único membro do conjunto ZooKeeper.
ZOO_HEAP_SIZE: Tamanho em MB para as opções de Java Heap (Xmx e XMs).
Configuração do Kafka
Os contêineres expõem apenas as seguintes portas:
INTERNAL - porta 9092 para comunicação intra-cluster
EXTERNAL - para conexão a partir do computador local:
kafka-1: 19093
kafka-2: 29093
kafka-3: 39093
Variáveis de Ambiente do Broker do Kafka
KAFKA_CFG_ZOOKEEPER_CONNECT: Pares host:port separados por vírgula, correspondentes a cada servidor do Zookeeper.
ALLOW_PLAINTEXT_LISTENER: Permite o uso do ouvinte PLAINTEXT.
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: Mapeamento entre nomes de listeners e protocolos de segurança.
KAFKA_CFG_LISTENERS: Lista separada por vírgulas de URIs para os listeners.
KAFKA_CFG_ADVERTISED_LISTENERS: Listeners a serem publicados no ZooKeeper para que os clientes usem, se forem diferentes da propriedade KAFKA_CFG_LISTENERS.
KAFKA_INTER_BROKER_LISTENER_NAME: Nome do listener usado para comunicação entre brokers.
KAFKA_CFG_NUM_PARTITIONS: O número padrão de partições de log por tópico.
KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: Permite a criação automática de tópicos no broker ao se inscrever ou atribuir um tópico.
KAFKA_CFG_DEFAULT_REPLICATION_FACTOR: Fatores de replicação padrão para tópicos criados automaticamente.
KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: O fator de replicação para o tópico de offsets.
KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: O fator de replicação para o tópico de transações.
KAFKA_HEAP_OPTS: Tamanho do Heap Java do Kafka.
KAFKA_CFG_BROKER_ID: ID personalizado do broker do Kafka.
Validar o Ambiente
Confirme se os contêineres estão ativos e em execução:
docker-compose -f build/docker-compose.yml ps
deve retornar informações semelhantes a esta:
Name Command State Ports
-----------------------------------------------------------------
build_kafka-ui_1 /kafdrop.sh Up 0.0.0.0:8080->8080/tcp
kafka-1 /opt/bitnami/scripts/kafka ... Up 0.0.0.0:19093->19093/tcp, 9092/tcp
kafka-2 /opt/bitnami/scripts/kafka ... Up 0.0.0.0:29093->29093/tcp, 9092/tcp
kafka-3 /opt/bitnami/scripts/kafka ... Up 0.0.0.0:39093->39093/tcp, 9092/tcp
zk-1 /opt/bitnami/scripts/zooke ... Up 0.0.0.0:12181->12181/tcp, 2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp
zk-2 /opt/bitnami/scripts/zooke ... Up 2181/tcp, 0.0.0.0:22181->22181/tcp, 2888/tcp, 3888/tcp, 8080/tcp
zk-3 /opt/bitnami/scripts/zooke ... Up 2181/tcp, 2888/tcp, 0.0.0.0:32181->32181/tcp, 3888/tcp, 8080/tcp
Certifique-se de que a comunicação possa ser estabelecida com o Zookeeper:
zookeeper-shell zk-1:12181 get /zookeeper/config
deve retornar informações semelhantes a esta:
Connecting to zk-1:12181
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
server.1=0.0.0.0:2888:3888:participant;0.0.0.0:12181
server.2=zookeeper2:2888:3888:participant;0.0.0.0:12181
server.3=zookeeper3:2888:3888:participant;0.0.0.0:12181
version=0
Liste os Kafka Brokers registrados no Zookeeper executando:
zookeeper-shell zk-1:12181 ls /brokers/ids
deve retornar informações semelhantes a esta:
Connecting to zk-1:12181
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[1001, 1002, 1003]
Kafdrop
Kafdrop⁹ é uma interface web para visualizar tópicos Kafka e navegar em grupos de consumidores. A ferramenta exibe informações como brokers, tópicos, partições, consumidores e permite visualizar mensagens. Para usar o Kafdrop, devemos acessar http://localhost:8080. Essa aplicação é uma representação gráfica para:
Visualizar brokers, todos os tópicos e configurações
Visualizar todos os dados nos tópicos
Visualizar mensagens enviadas
Visualizar grupos de consumidores
Criar tópicos (com algumas configurações)
Conclusāo
Este tutorial apresentou o ambiente Docker para executar localmente um ambiente Apache Kafka de 3 nós. Com este ambiente local em funcionamento, você pode iniciar suas aventuras no mundo dos sistemas distribuídos.
Recomendo vivamente que dê uma olhada no Guia de Início Rápido do Apache Kafka e obtenha mais experiência prática.
Comments