如何配置Spring Boot Kafka客户端使其不主动尝试连接Kafka服务
该问题与「Is there a "Circuit Breaker" for Spring Boot Kafka client?」相关,但属于独立的不同问题。
我们需要配置Spring Boot Kafka客户端,使其完全不主动尝试连接Kafka服务。
使用场景为:测试环境未运行Kafka服务,但仍需完整构建Spring Boot上下文,因此不能基于profile条件化加载对应Bean,仅要求Bean存在即可,不关心其是否正常连接。
当前存在的问题是:连接失败后的重试流程会消耗30-40秒,导致测试速度大幅降低。
请问Kafka配置参数中哪一项或哪些参数的组合可以完全禁止客户端发起连接尝试,或至少限制客户端仅尝试连接1次?
会多次重试连接的代码如下:
@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.
以下代码仅会尝试连接1次:
@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
但看起来没有任何效果。
内容的提问来源于stack exchange,提问作者Honza Zidek
相关产品推荐
相关产品推荐

