如果我的spring boot应用程序无法连接到kafka代理,我想使其启动失败。我的应用程序仅将消息发布到主题。我已将此行添加到属性文件中,但到目前为止spring.kafka.admin.fail-fast=true
还没有运气。
答案 0 :(得分:0)
fail-fast
仅在上下文中至少有一个NewTopic
bean时才有效(因此管理员将尝试检查该主题是否存在并创建该主题)。
@SpringBootApplication
public class So55177700Application {
public static void main(String[] args) {
SpringApplication.run(So55177700Application.class, args);
}
@Bean
public NewTopic topic() {
return new NewTopic("so55177700", 1, (short) 1);
}
}
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-03-15 09:42:49.555 ERROR 41793 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalStateException: Could not configure topics
答案 1 :(得分:0)
关于如何加速fail-fast的补充
TL;DR Spring Boot 2.4.5 自动配置不允许您使用 env 参数加速快速失败。将此添加到您的 @Configuration 以获得 10 秒超时:
@Bean
public KafkaAdmin kafkaAdmin(@Autowired KafkaProperties properties) {
KafkaAdmin kafkaAdmin = new KafkaAdmin(properties.buildAdminProperties());
kafkaAdmin.setFatalIfBrokerNotAvailable(properties.getAdmin().isFailFast());
/* speed up fail fast */
kafkaAdmin.setOperationTimeout(5);
kafkaAdmin.setCloseTimeout(5);
return kafkaAdmin;
}
更详细的答案
Fail-fast 在执行类 initialize()
的 org.springframework.kafka.core.KafkaAdmin
方法时发生。此方法可能会阻塞:
operationTimeout
closeTimeout
默认情况下,这些值分别为 30 和 10 秒(在上述类中硬编码)。您可以使用 set 方法重新定义它们:setOperationTimeout(int sec)
、setCloseTimeout(int sec)
。
Spring Boot 怎么样? KafkaAdmin
bean 在类 org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration
中创建。您可以猜到,Spring Boot 根本不设置超时:
@Bean
@ConditionalOnMissingBean
public KafkaAdmin kafkaAdmin() {
KafkaAdmin kafkaAdmin = new KafkaAdmin(this.properties.buildAdminProperties());
kafkaAdmin.setFatalIfBrokerNotAvailable(this.properties.getAdmin().isFailFast());
return kafkaAdmin;
}