【发布时间】:2022-01-07 22:03:21
【问题描述】:
这与Is there a "Circuit Breaker" for Spring Boot Kafka client?有关,但我仍然认为这是一个不同的问题:)
我们需要配置 Spring Boot Kafka 客户端,使其根本不尝试连接。
用例是在测试环境中我们没有运行 Kafka,但我们仍然需要构建完整的 Spring Boot 上下文,因此使这个 bean 以配置文件为条件是行不通的。我们不在乎 ben 是否未连接,但我们需要它存在。
问题在于不成功的连接尝试大约需要 30-40 秒,而且我们的测试速度明显变慢。
configuration parameters 中的哪个或它们的哪个组合完全禁止连接尝试,或者至少强制客户端仅尝试一次?
多次重试连接的代码是这样的:
@Bean
public KafkaAdmin.NewTopics topics() {
return new KafkaAdmin.NewTopics(
TopicBuilder.name("MyTopic").build()
);
}
它反复产生这个警告:
WARN ... org.apache.kafka.clients.NetworkClient : [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:29092) could not be established. Broker may not be available.
以下代码只尝试连接一次:
@Bean
public ReactiveKafkaConsumerTemplate<String, MyEvent> myConsumer(KafkaProperties properties) {
return createConsumer(properties, "MyTopic", "MyConsumerGroup");
}
public <E> ReactiveKafkaConsumerTemplate<String, E> createConsumer(KafkaProperties properties, String topic, String consumerGroup) {
final Map<String, Object> map = configureKafkaProperties(properties, consumerGroup);
return new ReactiveKafkaConsumerTemplate<>(
ReceiverOptions.<String, E>create(map)
.subscription(List.of(topic)));
}
生产
WARN 7268 ... org.apache.kafka.clients.NetworkClient : Connection to node -1 (localhost/127.0.0.1:29092) could not be established. Broker may not be available.
我也试过设置属性spring.kafka.admin.fail-fast=true
但这似乎根本没有效果。
【问题讨论】:
-
你有什么理由不能把
kafka.enable=false放在你的application.properties 中吗?如果不是autoStartup = "${auto.start:false}"应该是你的朋友。如果没有关于测试的更多信息,我不是 100% 确定 -
我的错,它不是标准设置。您将使用
@ConditionalOnProperty("kafka.enabled")注释您的配置文件,然后为您的测试禁用它 -
那么我评论的后半部分应该对你有用。
-
autoStartup = "false"是您的 KafkaListener 的设置,这意味着它不会自动启动容器,同时仍会创建 Kafka Bean。我之前的评论概述了如何将其设置为标准关闭。如果您愿意,您可以在标准上实现它,然后将其关闭以进行测试。如前所述,这应该可以解决您的问题,尽管您提供的信息有限我不是 100% 确定参考:docs.spring.io/spring-kafka/docs/2.6.2/reference/html/…
标签: java spring-boot configuration apache-kafka-streams spring-kafka