我在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秒,我想知道是否有更有效的方法来创建多个主题。或者,是否有一个简单的切换来按需自动创建主题?
发布于 2019-12-05 17:01:13
作为参考,使用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);
}
发布于 2019-12-04 06:40:21
KAFKA_CREATE_TOPICS
环境变量的wurstmeister/kafka
容器AdminClient
directly建议不要在代理上启用自动主题创建,因为这样会有默认的分区计数和复制因子
https://stackoverflow.com/questions/59164611
复制相似问题