Pular para o conteúdo principal

Kafka com Docker explicado: configuração, boas práticas e dicas

Aprenda a configurar o Apache Kafka com Docker usando Compose. Descubra boas práticas, armadilhas comuns e dicas para ambientes de desenvolvimento e testes
Atualizado 17 de set. de 2026  · 9 min lido

Explorar com IA

ChatGPTClaudePerplexity

No mundo dos pipelines de dados modernos e de microsserviços, o Apache Kafka se destaca como a solução ideal para lidar com fluxos de eventos em tempo real e integrar sistemas distribuídos. À medida que mais times de engenharia avançam para arquiteturas escaláveis e orientadas a eventos, o Kafka se torna central para a movimentação confiável de dados. 

Em paralelo a essa tendência, o Docker surgiu como a principal forma de desenvolvedores gerenciarem, compartilharem e implantarem serviços complexos sem se preocupar com ambientes inconsistentes ou problemas locais. 

Usando Docker para executar o Kafka, os times conseguem subir rapidamente clusters com cara de produção para testes, provas de conceito e até mesmo cargas de trabalho em produção. 

Este artigo é voltado para desenvolvedores backend de nível intermediário, engenheiros de DevOps e qualquer pessoa envolvida na gestão de plataformas de dados que queira tornar o trabalho com Kafka mais simples e reprodutível.

Se você é novo em Kafka ou Docker, confira nosso curso Introduction to Apache Kafka ou o guia Docker for Beginners: A Practical Guide to Containers.

O que é Kafka e por que usar Docker?

O Apache Kafka é uma plataforma de streaming distribuída projetada para mensageria com alta taxa de transferência, tolerância a falhas e escalabilidade. 

Ele atua como um pipeline durável e de alta velocidade entre produtores e consumidores de dados. Sempre que você precisar conectar microsserviços, orquestrar fluxos de dados ou processar análises em tempo real, o Kafka costuma ser a ferramenta certa.

Você pode aprender a criar aplicações de processamento de dados em tempo real com Kafka Streams no nosso Kafka Streams Tutorial. O tutorial aborda conceitos essenciais, implementações em Java e Python e exemplos passo a passo para construir aplicações de streaming escaláveis.

Executar o Kafka pode ser complexo. Mesmo engenheiros experientes acham a combinação de brokers, tópicos, partições e componentes necessários como Zookeeper ou KRaft desafiadora. 

O Docker simplifica o processo ao empacotar binários, dependências e configurações em containers. 

Com Docker, os engenheiros podem iniciar um cluster Kafka em qualquer máquina, compartilhar configurações idênticas com colegas e evitar a famosa dor de cabeça do "funciona na minha máquina". O Kafka em Docker é especialmente popular para:

  • Desenvolvimento e testes locais, onde subir e derrubar serviços rapidamente é valioso
  • Ambientes de integração isolados em pipelines de CI/CD
  • Simular clusters com vários brokers em um único host
  • Ambientes de treinamento e demonstração

Explore o Apache Kafka com nosso guia Apache Kafka for Beginners. Aprenda o básico, comece a usar e descubra recursos avançados e aplicações reais dessa poderosa plataforma de streaming de eventos.

Fundamentos do Kafka no Docker

Antes de entrar na orquestração, vale destrinchar as partes técnicas do Kafka e como o Docker ajuda a recriar sua natureza distribuída em um laptop ou servidor. 

Como você vai ver no nosso tutorial Learn Docker from Scratch, o Docker é uma ferramenta popular para simplificar a implantação, escalabilidade e gestão de aplicações como o Kafka por meio de conteinerização.

Noções básicas da arquitetura do Kafka

A espinha dorsal do Kafka é o broker: um processo de servidor que armazena, recebe e entrega mensagens. Cada cluster pode ter vários brokers, distribuindo dados e carga. 

Dentro de cada broker existem tópicos (canais nomeados para organizar mensagens) e partições (subcanais que espalham eventos por vários servidores para paralelismo e durabilidade). Produtores escrevem dados em tópicos, enquanto consumidores assinam e processam essas mensagens.

Coordenação é essencial. Tradicionalmente, o Kafka dependia do Zookeeper para lidar com metadados de brokers, liderança de partições e a saúde geral do cluster. Implementações mais novas podem usar o modo KRaft, que internaliza essa coordenação no próprio Kafka, eliminando a dependência do Zookeeper. O ZooKeeper foi descontinuado na versão 3.5 e deve ser removido na 4.0.

Aprenda a conteinerizar aplicações de machine learning com Docker e Kubernetes usando nosso tutorial How to Containerize an Application Using Docker

Modo KRaft: simplificando a arquitetura do Kafka

A partir da versão 2.8, o Kafka introduziu o modo KRaft, permitindo gerenciar metadados internamente sem depender do Zookeeper, sendo considerado pronto para produção na versão 3.3. Essa mudança simplifica as implantações e reduz o número de componentes a serem gerenciados.

Para configurar o Kafka em modo KRaft usando Docker Compose:

version: '3.8'
services:
  kafka:
    image: apache/kafka:latest
    container_name: kafka
    ports:
      - "9092:9092"
      - "9093:9093"
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LOG_DIRS: /var/lib/kafka/data
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_LOG_RETENTION_HOURS: 168
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      CLUSTER_ID: "Mk3OEYBSD34fcwNTJENDM2Qk"
    volumes:
      - ./data:/var/lib/kafka/data

Essa configuração cria um cluster Kafka de nó único em modo KRaft, eliminando a necessidade do Zookeeper.

Essenciais de Docker

Para executar Kafka com Docker, você só precisa de alguns itens: Docker Engine (o runtime) e, geralmente, Docker Compose para gerenciar múltiplos containers. 

Arquivos Compose permitem especificar vários serviços (Kafka, Zookeeper, Kafka UI etc.), suas redes, variáveis de ambiente e quaisquer montagens de armazenamento. A rede do Docker possibilita emular clusters com vários brokers, mesmo em uma única máquina, dando a cada broker seu container, hostnames e portas.

Uma das melhores formas de se familiarizar com Docker é com projetos práticos. Treine usando estas 10 Docker Project Ideas

Configurando o Kafka com Docker Compose

Docker Compose costuma ser a forma preferida de executar aplicações que exigem vários containers interagindo. Em vez de lidar com scripts de shell ou comandos manuais, o Compose permite definir todos os serviços e seus vínculos em um único arquivo YAML. 

Essa abordagem reduz a deriva de configuração, acelera o onboarding e garante que todos usem a mesma stack no desenvolvimento.

Configuração mínima com Compose

Aqui está um docker-compose.yml básico que inicia o Kafka e o Zookeeper para desenvolvimento local:

version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
    ports:
      - "2181:2181"
  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    ports:
      - "9092:9092"
    volumes:
      - kafka_data:/var/lib/kafka/data
volumes:
  kafka_data:

Essa configuração mínima mapeia as portas relevantes, conecta o Kafka ao Zookeeper e monta um volume do Docker para que as mensagens não sumam se os containers reiniciarem. Use variáveis de ambiente para configurar a identidade do broker, os endereços de listeners e os endpoints de conexão entre serviços.

Entender bem o Kafka é essencial para mandar bem em entrevistas de engenharia de dados. Prepare-se para a sua próxima entrevista com nossa lista de perguntas e respostas usando estas 20 Kafka Interview Questions for Data Engineers

Configuração estendida

Ambientes profissionais costumam adicionar ferramentas como Kafka UI, Schema Registry ou REST Proxy para facilitar a gestão e a inspeção de mensagens. Elas podem ser incluídas no bloco de services do seu arquivo compose. Por exemplo:

kafka-ui:
  image: provectuslabs/kafka-ui:latest
  ports:
    - "8080:8080"
  environment:
    KAFKA_CLUSTERS_0_NAME: "Local"
    KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: "kafka:9092"

Persistir tópicos e logs do Kafka entre reinicializações é essencial para testar cenários de recuperação ou jobs de longa duração. Sempre monte volumes do Docker em /var/lib/kafka/data para cada broker e em /var/lib/zookeeper para o Zookeeper, se estiver em uso.

Escolher a imagem certa é fundamental. Aqui vai um resumo rápido:

Imagem Docker do Kafka

Mantenedor

Recursos

Melhor caso de uso

Confluent

Confluent

Conjunto completo, muitos add-ons

Ambientes próximos de produção, testes avançados

Bitnami

Bitnami

Limpa, minimalista

Desenvolvimento local, ambientes com poucos recursos

Apache Kafka (KRaft)

Apache

Sem Zookeeper, setup simplificado

Implantações modernas, arquitetura simplificada

O tutorial How to Learn Apache Kafka in 2025 aprofundará mais detalhes sobre o Kafka, incluindo 

  • O que torna o Apache Kafka popular?
  • Principais recursos do Apache Kafka
  • Diversas aplicações do Apache Kafka

Interagindo com o Kafka no Docker

Assim que o Kafka estiver rodando via Docker Compose, você pode criar tópicos e enviar dados imediatamente, como faria em qualquer implantação padrão.

Acesso via CLI e comandos do Kafka

Use docker-compose exec ou docker exec para rodar as ferramentas de CLI do Kafka. Por exemplo, para criar um tópico, execute:

docker-compose exec kafka kafka-topics.sh --create --topic demo --bootstrap-server localhost:9092

Você também pode usar kafka-console-producer.sh e kafka-console-consumer.sh da mesma forma. Isso cria um ciclo de feedback rápido para testes de integração ou experimentação sem poluir seu ambiente local.

Acesso programático a partir de apps

Aplicações e scripts podem se conectar ao seu Kafka conteinerizado usando os bootstrap servers anunciados pelo host. Para apps locais, defina bootstrap.servers=localhost:9092 ou equivalente. 

Clientes comuns incluem as bibliotecas oficiais do Kafka para Python, Java, NodeJS e Go. Garanta que a pilha de rede da sua aplicação alcance as portas e endereços corretos.

Rede no Docker e conectividade do Kafka

A configuração de rede do Kafka frequentemente traz desafios. Entender listeners internos e externos e como expor serviços é vital.

Listeners internos vs. externos

Brokers do Kafka usam listeners para controlar conexões de clientes. Dois setups comuns são:

  • PLAINTEXT://:9092 para tráfego local sem segurança, especialmente em dev
  • SSL ou SASL_SSL para conexões criptografadas ou autenticadas

No docker-compose, exponha as portas corretas e garanta que KAFKA_ADVERTISED_LISTENERS corresponda ao host e porta reais que suas apps usam. Se estiver em uma VM ou nuvem, ajuste para o IP público e a porta mapeada.

Aspecto

Listener interno

Listener externo

Protocolo comum

PLAINTEXT://:9092

SSL://, SASL_SSL:// ou PLAINTEXT:// mapeado

Segurança

Sem criptografia, sem autenticação

Criptografado e/ou autenticado

Uso típico

Desenvolvimento local, tráfego entre containers

Clientes remotos, VMs na nuvem, acesso em produção

Setup no Docker Compose

Expor a porta 9092 na rede interna

Mapear 9092 no host e definir KAFKA_ADVERTISED_LISTENERS para o IP público

Foco da configuração

Simplicidade e velocidade

Confiabilidade, segurança, acesso público

Escopo de rede

Localhost ou rede interna do Docker

IP público ou domínio exposto externamente

Configurando múltiplos listeners para diferentes acessos de clientes

Em ambientes Docker, é comum configurar múltiplos listeners para lidar com diferentes cenários de acesso de clientes:

environment:
  KAFKA_LISTENERS: INTERNAL://0.0.0.0:29092,EXTERNAL://0.0.0.0:9092
  KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://localhost:9092
  KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
  KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL

Esse setup permite que clientes internos do Docker se conectem via o listener INTERNAL e clientes externos se conectem via o listener EXTERNAL.

Solucionando problemas de conectividade

Erros comuns incluem “broker not available”, “connection refused” ou timeouts no cliente. Verifique:

  • Se as portas estão expostas e mapeadas corretamente
  • Se os advertised listeners do broker batem com o endereço que o cliente usa
  • Se todos os containers estão saudáveis com docker-compose ps
  • Se a resolução de DNS funciona entre containers (use o nome do serviço, por exemplo, kafka:9092)
  • Use docker network inspect para depurar links entre containers

Kafka com Docker em ambientes parecidos com produção

Além dos testes locais, ambientes de Kafka conteinerizados também ajudam em staging e CI/CD.

Estratégias de orquestração de containers

Orquestradores como Docker Swarm e Kubernetes conseguem gerenciar setups de Kafka com vários brokers, atualizações contínuas (rolling updates) e discovery de serviços. Cada broker fica em seu container, com armazenamento persistente acoplado. 

No Kubernetes, StatefulSets cuidam da implantação ordenada e criam nomes de DNS estáveis para cada broker.

Logs e monitoramento

Direcione os logs do Kafka para o driver de logs do Docker ou para um armazenamento externo para análise. Muitos times enviam logs para Elasticsearch, Loki ou Splunk para troubleshooting. Combine Kafka em Docker com Prometheus e Grafana para monitorar o cluster.

Dicas de otimização para Kafka no Docker

A performance do Kafka depende de uma gestão cuidadosa de recursos e armazenamento.

Alocação de recursos

Dê a cada container de broker CPU, RAM e disco suficientes para imitar o mais perto possível o ambiente de produção. Ajuste limites de recursos do Docker e passe opções da JVM com KAFKA_JVM_PERFORMANCE_OPTS para heap e coleta de lixo.

Armazenamento persistente

Sempre use volumes do Docker ou bind mounts para /var/lib/kafka/data e /var/lib/zookeeper. Armazenar dados dentro do container significa perdê-los ao reiniciar, o que inviabiliza testes de durabilidade. Alta taxa de escrita em disco é crítica para performance sustentada, especialmente em testes de carga em CI/CD.

Boas práticas e armadilhas comuns

Estabilidade, manutenção e produtividade do time se beneficiam de algumas boas práticas.

Gestão de configuração

Gerencie segredos e configurações externamente com arquivos .env ou diretórios de configuração montados. Nunca codifique dados sensíveis diretamente no YAML do compose. Para setups reutilizáveis, considere ferramentas de template ou frameworks de gestão de configuração.

Erros comuns

Como evitar erros recorrentes

  • Não armazene dados dentro dos containers; sempre monte volumes
  • Verifique conflitos de porta no seu host
  • Evite senhas padrão de admin; proteja portas expostas, mesmo em desenvolvimento local
  • Mantenha as imagens Docker atualizadas; corrija CVEs e dependências obsoletas

Reforçando a segurança do Kafka

Para proteger sua implantação do Kafka:

  • Habilite criptografia TLS: Proteja os dados em trânsito configurando SSL/TLS para todas as conexões.
  • Implemente autenticação: Use mecanismos SASL (por exemplo, SCRAM, GSSAPI) para autenticar clientes.
  • Configure autorização: Defina listas de controle de acesso (ACLs) para controlar permissões dos clientes.
  • Gire credenciais regularmente: Altere senhas e chaves periodicamente para reduzir riscos.
  • Monitore e faça auditoria: Habilite logs de auditoria para rastrear acessos e mudanças no cluster

Conclusão

O Docker torna surpreendentemente fácil iniciar, ajustar e experimentar clusters do Apache Kafka para integração, aprendizado ou até testes semelhantes aos de produção. Os containers isolam você de problemas do SO host e de incompatibilidades de dependências, garantindo que seus ambientes de dev e teste correspondam ao esperado. À medida que você evolui de clusters locais simples para plataformas de Kafka orquestradas, investir em setups robustos de Docker e em boas práticas vai economizar tempo e evitar frustrações do seu time. 

Explore mais sobre Kafka e Docker em um dos nossos cursos completos: 

Docker e Kafka: perguntas frequentes

Preciso do Zookeeper para rodar Kafka no Docker?

Nem sempre. Embora setups tradicionais do Kafka dependam do Zookeeper, versões mais novas suportam o modo KRaft, que elimina a necessidade do Zookeeper ao internalizar a coordenação do cluster. No entanto, muitos exemplos de Docker Compose ainda usam Zookeeper por padrão por compatibilidade e estabilidade. O ZooKeeper foi descontinuado na versão 3.5 e deve ser removido na 4.0.

Posso usar Kafka em Docker para cargas de trabalho de produção?

Embora seja possível implantar aplicações sem ferramentas de orquestração como Kubernetes ou Docker Swarm, isso nem sempre é recomendado. Em produção, considere persistência, monitoramento, segurança, escalabilidade e suporte a failover. O Docker é ideal para desenvolvimento e testes, mas exige planejamento cuidadoso para produção.

Por que meu cliente Kafka está dando erro de conexão ao usar Docker?

A maioria dos problemas de conexão de clientes vem de configurações incorretas de KAFKA_ADVERTISED_LISTENERS. Garanta que o valor reflita o endereço usado pelo cliente (por exemplo, localhost:9092 em dev local) e que as portas do Docker estejam expostas corretamente.

Qual imagem Docker do Kafka devo usar: Confluent, Bitnami ou Apache?

Use a imagem da Confluent para setups completos e testes avançados, a da Bitnami para desenvolvimento local direto ao ponto e a do Apache para builds mínimos e customizáveis. Escolha conforme seu caso de uso, necessidades de recursos e requisitos de segurança.

Como persistir dados entre reinicializações do container do Kafka?

Sempre use volumes do Docker ou bind mounts mapeados para /var/lib/kafka/data e /var/lib/zookeeper (se usado). Sistemas de arquivos de containers são efêmeros; sem armazenamento externo, todas as mensagens e tópicos serão perdidos em reinicializações.


Derrick Mwiti's photo
Author
Derrick Mwiti
Tópicos
Docker
Kafka
Engenharia de dados

Principais cursos da DataCamp

Programa

Containerização e virtualização com o Docker e o Kubernetes

13 h
Aprenda o poder do Docker e do Kubernetes, este curso interativo permitirá que você crie e implemente aplicativos em ambientes modernos.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

blog

O guia de certificação Kafka para profissionais de dados

Saiba como avançar em sua carreira com as certificações Confluent Certified Developer (CCDAK) e Administrator (CCAAK), obtendo a experiência e o reconhecimento necessários para se destacar em streaming e gerenciamento de dados.
Adejumo Ridwan Suleiman's photo

Adejumo Ridwan Suleiman

13 min

blog

O Guia Completo para a Certificação Docker (DCA) em 2026

Descubra todo o seu potencial no Docker e na ciência de dados com o nosso guia completo. Dá uma olhada nas certificações, trilhas de aprendizagem e dicas práticas do Docker.
Matt Crabtree's photo

Matt Crabtree

8 min

blog

Competições da Kaggle: O guia completo

Saiba tudo sobre as competições da Kaggle. Descubra o que são, como ter sucesso e quando e por que você deve fazê-las.
Çağlar Uslu's photo

Çağlar Uslu

15 min

Tutorial

Como instalar e configurar o MySQL no Docker

Saiba como instalar e configurar o banco de dados MySQL dentro de contêineres do Docker. O tutorial inclui conceitos como conexão com servidores MySQL, execução de clientes MySQL para conexão com contêineres e assim por diante.

Tutorial

Guia de torchchat do PyTorch: Configuração local com Python

Saiba como configurar o torchchat do PyTorch localmente com Python neste tutorial prático, que fornece orientação e exemplos passo a passo.
Clustering k-means

Tutorial

Introdução ao k-Means Clustering com o scikit-learn em Python

Neste tutorial, saiba como aplicar o k-Means Clustering com o scikit-learn em Python

Kevin Babitz

8 min

Ver MaisVer Mais