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?
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?)