【问题标题】:How to efficiently create Kafka topics with testcontainers?如何使用测试容器高效地创建 Kafka 主题?
【发布时间】:2020-03-28 13:58:44
【问题描述】:

我正在使用带有KafkaContainer 的 testcontainers.org。

目前我在启动容器后使用kafka-topics创建话题:

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

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

【问题讨论】:

    标签: apache-kafka testcontainers


    【解决方案1】:

    作为参考,使用 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);
      }
    

    【讨论】:

      【解决方案2】:
      1. 使用wurstmeister/kafka 容器和KAFKA_CREATE_TOPICS 环境变量

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

      3. 否则直接use AdminClient

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

      【讨论】:

      • 仅供参考,Testcontainers 使用 Confluent 的 Kafka 映像,并配置为自动创建主题。
      • @bsideup 如前所述,代理上的自动创建提供了代理定义的默认设置。 wurstmeister 容器允许为每个主题设置单独的复制和分区计数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2021-09-09
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多