Testcontainers Kafka module for automatically instantiating and managing Apache Kafka containers in tests
npx @tessl/cli install tessl/maven-org-testcontainers--kafka@1.21.0Testcontainers Kafka module provides container implementations for running Apache Kafka during integration testing. It supports multiple Kafka distributions including Apache Kafka, Confluent Platform, and legacy compatibility modes with embedded or external Zookeeper and modern KRaft mode for Zookeeper-free deployments.
Package Name: org.testcontainers:kafka
Package Type: maven
Language: Java
Installation:
Maven:
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>kafka</artifactId>
<version>1.21.3</version>
<scope>test</scope>
</dependency>Gradle:
testImplementation 'org.testcontainers:kafka:1.21.3'import org.testcontainers.kafka.KafkaContainer;
import org.testcontainers.kafka.ConfluentKafkaContainer;
import org.testcontainers.utility.DockerImageName;For legacy support (deprecated):
import org.testcontainers.containers.KafkaContainer;import org.testcontainers.kafka.KafkaContainer;
import org.testcontainers.utility.DockerImageName;
// Apache Kafka using modern container
try (KafkaContainer kafka = new KafkaContainer("apache/kafka:3.8.0")) {
kafka.start();
String bootstrapServers = kafka.getBootstrapServers();
// Use bootstrapServers to configure your Kafka clients
// Example: "localhost:32768"
}
// Confluent Platform using modern container
try (ConfluentKafkaContainer kafka = new ConfluentKafkaContainer("confluentinc/cp-kafka:7.4.0")) {
kafka.start();
String bootstrapServers = kafka.getBootstrapServers();
}The Testcontainers Kafka module provides three main container implementations:
org.testcontainers.kafka.KafkaContainer for apache/kafka and apache/kafka-native images with KRaft mode by defaultorg.testcontainers.kafka.ConfluentKafkaContainer for confluentinc/cp-kafka images (7.4.0+) with KRaft mode by defaultorg.testcontainers.containers.KafkaContainer (deprecated) supporting embedded Zookeeper, external Zookeeper, and KRaft modesorg.testcontainers.kafka.KafkaHelper providing common functionality and constants for modern containersModern container implementation for Apache Kafka with KRaft mode and flexible listener configuration.
public class KafkaContainer extends GenericContainer<KafkaContainer> {
public KafkaContainer(String imageName);
public KafkaContainer(DockerImageName dockerImageName);
public KafkaContainer withListener(String listener);
public KafkaContainer withListener(String listener, Supplier<String> advertisedListener);
public String getBootstrapServers();
}Modern container implementation for Confluent Platform with KRaft mode and flexible listener configuration.
public class ConfluentKafkaContainer extends GenericContainer<ConfluentKafkaContainer> {
public ConfluentKafkaContainer(String imageName);
public ConfluentKafkaContainer(DockerImageName dockerImageName);
public ConfluentKafkaContainer withListener(String listener);
public ConfluentKafkaContainer withListener(String listener, Supplier<String> advertisedListener);
public String getBootstrapServers();
}Legacy container implementation with Zookeeper and KRaft mode support. Use modern containers instead.
@Deprecated
public class KafkaContainer extends GenericContainer<KafkaContainer> {
public KafkaContainer(DockerImageName dockerImageName);
public KafkaContainer withEmbeddedZookeeper();
public KafkaContainer withExternalZookeeper(String connectString);
public KafkaContainer withKraft();
public KafkaContainer withClusterId(String clusterId);
public KafkaContainer withListener(Supplier<String> listenerSupplier);
public String getBootstrapServers();
}Shared utility class providing common constants and functionality for modern Kafka containers.
class KafkaHelper {
static final int KAFKA_PORT = 9092;
static final String STARTER_SCRIPT = "/tmp/testcontainers_start.sh";
static Map<String, String> envVars();
}// Apache Kafka images (for KafkaContainer)
DockerImageName.parse("apache/kafka:3.8.0")
DockerImageName.parse("apache/kafka-native:3.8.0")
// Confluent Platform images (for ConfluentKafkaContainer)
DockerImageName.parse("confluentinc/cp-kafka:7.4.0")
// Legacy support (deprecated KafkaContainer)
DockerImageName.parse("confluentinc/cp-kafka:6.2.1")// Simple listener format for modern containers
String listener = "kafka:19092";
// Supplier for dynamic advertised listeners
Supplier<String> advertisedListener = () -> "external-host:9092";All Kafka containers inherit standard Testcontainers functionality:
// Container lifecycle
public void start();
public void stop();
public boolean isRunning();
// Network and port access
public String getHost();
public Integer getMappedPort(int originalPort);
public KafkaContainer withNetwork(Network network);
public KafkaContainer withNetworkAliases(String... aliases);
// Environment and configuration
public KafkaContainer withEnv(String key, String value);
public KafkaContainer withEnv(Map<String, String> env);// Modern containers (KafkaContainer, ConfluentKafkaContainer)
static final int KAFKA_PORT = 9092;
// Legacy container
public static final int KAFKA_PORT = 9093;
public static final int ZOOKEEPER_PORT = 2181;
public static final String DEFAULT_CLUSTER_ID = "4L6g3nShT-eMCtK--X86sw";