top of page
Foto do escritorRafael Natali

Como instalar o Kafka usando o Docker

Instale e configure um ambiente Docker para executar o Apache Kafka localmente.

Topologia de Ambiente Docker com Apache Zookeeper e Apache Kafka - do autor
Topologia de Ambiente Docker com Apache Zookeeper e Apache Kafka - do autor

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:

  1. Este tutorial foi testado usando o Docker Desktop⁵ para macOS, com a versão do Engine 20.10.2.

  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.

  3. 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).

  4. Se estiver usando o shell zsh, você precisará editar o arquivo ~/.zshrc.

  5. 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.

Referências

1 visualização0 comentário

Comments

Couldn’t Load Comments
It looks like there was a technical problem. Try reconnecting or refreshing the page.
bottom of page