如何使用 testcontainers 高效地创建 Kafka 主题?

Joc*_*ist 6 apache-kafka testcontainers

我正在使用 testcontainers.org 和KafkaContainer.

目前,我用来kafka-topics在启动容器后创建一个主题:

kafkaContainer.execInContainer("/bin/sh", "-c", "/usr/bin/kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic topicName");
Run Code Online (Sandbox Code Playgroud)

由于每个主题大约需要 3-5 秒,我想知道是否有更有效的方法来创建多个主题。或者是否有一个简单的开关来按需自动创建主题?

Joc*_*ist 6

作为参考,使用 AdminClient 是最有效的。

下面是一个例子:

  private static void createTopics(String... topics) {
    var newTopics =
        Arrays.stream(topics)
            .map(topic -> new NewTopic(topic, 1, (short) 1))
            .collect(Collectors.toList());
    try (var admin = AdminClient.create(Map.of(BOOTSTRAP_SERVERS_CONFIG, getKafkaBrokers()))) {
      admin.createTopics(newTopics);
    }
  }

  private static String getKafkaBrokers() {
    Integer mappedPort = kafkaContainer.getFirstMappedPort();
    return String.format("%s:%d", "localhost", mappedPort);
  }
Run Code Online (Sandbox Code Playgroud)


cri*_*007 3

  1. 使用带有环境变量wurstmeister/kafka的容器KAFKA_CREATE_TOPICS

  2. 您可以使用更高级别的 Kafka 客户端,例如Spring-Kafka或 Dropwizard-Kafka,它们提供主题创建功能。

  3. 否则直接使用AdminClient

建议不要在代理上启用自动主题创建,因为它具有默认的分区计数和复制因子

  • 仅供参考 Testcontainers 使用 Confluence 的 Kafka 镜像,并且还配置为自动创建主题。 (4认同)