1
resposta

[Dúvida] Erro ao estabelecer conexão do Java com o Docker

Boa noite pessoal,

Estou fazendo o curso de Apache Kafka e na parte de implementar o KafkaProducer em Java estou com erros, segue abaixo o meu fonte em Java:

package br.com.alura;

import java.util.Properties;
import java.util.concurrent.ExecutionException;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;

public class NewOrderMain {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        var producer = new KafkaProducer<String, String>(properties());
        var value = "1,1,500.00";
        var record = new ProducerRecord<>("ECOMMERCE_NEW_ORDER",value, value);
        producer.send(record, (data, ex) -> {
            if (ex != null) {
                ex.printStackTrace();
                return;
            }
            System.out.println("sucesso enviando neste topico" + data.topic() + ":::partition " + data.partition() + "/ offset" + data.offset() + "/ timestamp " + data.timestamp());
        }).get();
    }

    private static Properties properties() {
        var properties = new Properties();
        properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092"); //Estabelecer conexão com servidor Kafka
        properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); //Serializador de String para byte para a Key do Map
        properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); //Serializador de String para byte para o Value do Map
        return properties;
    }
}

Segue o arquivo Pom XML:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>br.com.alura</groupId>
    <artifactId>ecommerce</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>3.4.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>2.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.6</version>
        </dependency>
    </dependencies>

    <properties>
        <maven.compiler.source>19</maven.compiler.source>
        <maven.compiler.target>19</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

Estou rodando o Kafka em um Container no Docker, a mensagem de erro que aparece ao compilar e executar o programa é:


[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Error connecting to node 15adbe316ac0:9092 (id: 1001 rack: null)
java.net.UnknownHostException: Este host não é conhecido (15adbe316ac0)
    at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)

    at org.apache.kafka.clients.producer.internals.Sender.sendProducerData(Sender.java:354)
    at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:327)
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:243)
    at java.base/java.lang.Thread.run(Thread.java:1589)
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Error connecting to node 15adbe316ac0:9092 (id: 1001 rack: null)
1 resposta

Oi Matheus, tudo bem?

Pelo que pude perceber, o erro que está ocorrendo está relacionado à conexão do seu programa Java com o Kafka rodando em um container Docker. O erro específico é um UnknownHostException, indicando que o host não é conhecido.

Esse erro geralmente ocorre quando o endereço IP ou nome do host configurado no seu código Java não está correto. No seu caso, você está usando o endereço 15adbe316ac0:9092, que parece ser o ID do container Docker. No entanto, o seu programa Java não consegue resolver esse endereço para um IP válido.

Uma possível solução para esse problema é verificar se o endereço IP do seu container Docker está correto e se o Kafka está realmente sendo executado nesse endereço. Você pode usar o comando docker inspect <nome_do_container> para obter informações detalhadas sobre o seu container, incluindo o endereço IP.

Além disso, verifique se o seu container Docker está configurado corretamente para expor a porta 9092, que é a porta padrão do Kafka. Caso contrário, você precisará configurar a porta correta no seu código Java.

Outra opção é usar o endereço IP 127.0.0.1, que se refere ao localhost, ou seja, a máquina onde o seu programa Java está sendo executado. Se o Kafka estiver sendo executado na mesma máquina que o seu programa Java, essa opção deve funcionar.

Um abraço e bons estudos.