Oi, Diogo!
O erro Error connecting to node kafka:9092 que você está enfrentando ao tentar conectar o produtor Java ao Kafka pode estar relacionado a vários fatores, como configurações de rede, de porta ou de identificação do broker no Docker. Algumas sugestões para resolver ou diagnosticar o problema:
- Verificar Configuração de Rede no Docker
Como você está rodando o Kafka em um container Docker, a comunicação entre o producer Java e o Kafka pode estar sendo bloqueada pela configuração de rede. Verifique se a configuração de rede no Docker está corretamente mapeada entre os containers e se o host do Kafka (o localhost:9092) está acessível para o seu producer Java.
A sua configuração de KAFKA_CFG_ADVERTISED_LISTENERS e KAFKA_CFG_LISTENERS parece correta, mas o problema pode estar em como o producer Java está tentando conectar ao Kafka.
- Alterar o Endpoint de Conexão do Producer
No seu código Java, ao configurar o bootstrap.servers para o producer, tente usar localhost:29092 (porta externa mapeada no Docker) em vez de kafka:9092, já que a configuração de Kafka pode não estar acessível de fora do container com o nome kafka.
Alterando no código do seu Producer Java para:
props.put("bootstrap.servers", "localhost:29092");
Isso pode garantir que o producer se conecte ao Kafka através da porta externa (29092) mapeada corretamente no seu Docker.
- Verificar Logs do Kafka
Verifique os logs do Kafka para ver se há algum erro de configuração ou de rede. Para isso, acesse o container Kafka e veja os logs:
docker logs kafka
Isso pode dar mais insights sobre se o Kafka está aceitando conexões na porta 9092 ou se está ocorrendo algum erro de rede.
- Verificar Zookeeper
O Kafka depende do Zookeeper para coordenação. Certifique-se de que o Zookeeper está rodando corretamente e aceitando conexões na porta 2181. Você pode verificar os logs do container do Zookeeper para isso:
docker logs zookeeper
Se o Zookeeper não estiver acessível, o Kafka pode ter dificuldades para iniciar ou para se conectar aos seus brokers.
Verificar Configuração do Docker Compose
Certifique-se de que as dependências entre os serviços estão corretamente configuradas no Docker Compose. Pelo seu arquivo, a dependência entre Kafka e Zookeeper está correta, mas às vezes o Docker pode precisar de um tempo extra para iniciar o Zookeeper antes do Kafka. Adicionar um tempo de espera na inicialização do Kafka pode ajudar:
kafka:
...
depends_on:
- zookeeper
entrypoint: /bin/sh -c "sleep 15; /opt/bitnami/kafka/bin/kafka-server-start.sh /opt/bitnami/kafka/config/server.properties"
Isso vai garantir que o Kafka espere um pouco mais até o Zookeeper estar totalmente disponível antes de tentar iniciar.
- Testar Conexão ao Kafka com Kafka-UI
Já que você tem o Kafka-UI rodando, use a interface web para testar a conexão com o broker Kafka. Acesse http://localhost:8080, configure o Kafka cluster e veja se a UI consegue se conectar ao broker na porta 9092. Isso pode te ajudar a identificar se o problema está no Kafka ou na configuração do producer Java.
Espero ter ajudado!