Search code examples
javaapache-kafkaconfluent-schema-registrytestcontainers

Containers SchemaRegistry can't connect to Kafka container


I tried to use this approach to Testcontainers SchemaRegistry can't connect to Kafka container to start a schema registry test container, but it don't work

First try was:

   public SchemaRegistryContainer withKafka( final KafkaContainer kafkaContainer ) {
      withNetwork( kafkaContainer.getNetwork() );
      withEnv( "SCHEMA_REGISTRY_HOST_NAME", "kafka-confluent-cp-schema-registry" );
      withEnv( "SCHEMA_REGISTRY_LISTENERS", "http://0.0.0.0:" + SCHEMA_REGISTRY_PORT );
      withEnv( "SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS", kafkaContainer.getBootstrapServers() );
      return self();
   }

Error:

java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: listNodes
        at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)
        at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999)
        at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:165)
        at io.confluent.admin.utils.ClusterStatus.isKafkaReady(ClusterStatus.java:147)
        at io.confluent.admin.utils.cli.KafkaReadyCommand.main(KafkaReadyCommand.java:149)
Caused by: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: listNodes

Then i tried this:

   public SchemaRegistryContainer withKafka( final KafkaContainer kafkaContainer ) {
      withNetwork( kafkaContainer.getNetwork() );
      withEnv( "SCHEMA_REGISTRY_HOST_NAME", "schema-registry" );
      withEnv( "SCHEMA_REGISTRY_LISTENERS", "http://0.0.0.0:" + SCHEMA_REGISTRY_PORT );
      withEnv( "SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS", "PLAINTEXT://" + kafkaContainer.getNetworkAliases().get( 0 ) + ":9092" );
      return self();
   }

Error

2023-04-27 07:46:35,687] WARN Couldn't resolve server PLAINTEXT://tc-HJrDbND5:9092 from bootstrap.servers as DNS resolution failed for tc-HJrDbND5 (org.apache.kafka.clients.ClientUtils)
[2023-04-27 07:46:35,687] ERROR Error while running kafka-ready. (io.confluent.admin.utils.cli.KafkaReadyCommand)
org.apache.kafka.common.KafkaException: Failed to create new KafkaAdminClient
        at org.apache.kafka.clients.admin.KafkaAdminClient.createInternal(KafkaAdminClient.java:553)
        at org.apache.kafka.clients.admin.Admin.create(Admin.java:144)
        at org.apache.kafka.clients.admin.AdminClient.create(AdminClient.java:49)
        at io.confluent.admin.utils.ClusterStatus.isKafkaReady(ClusterStatus.java:136)
        at io.confluent.admin.utils.cli.KafkaReadyCommand.main(KafkaReadyCommand.java:149)
Caused by: org.apache.kafka.common.config.ConfigException: No resolvable bootstrap urls given in bootstrap.servers
        at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:89)
        at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:48)
        at org.apache.kafka.clients.admin.KafkaAdminClient.createInternal(KafkaAdminClient.java:505)
        ... 4 more

Anyone have any ideas what else I can test?


Solution

  • Couldn't resolve server PLAINTEXT://tc-HJrDbND5:9092

    You should remove PLAINTEXT prefix.

    Make sure the containers are on the same network bridge, which I've see you've tried by withNetwork().

    Otherwise, modify the listeners of the Kafka container though its own environment variables, otherwise you'll get Kafka client errors even without Schema Registry (I assume you've already tested that?)