当kafka代理不可用时,如何防止正在运行的Spring Boot应用程序崩溃?

时间:2019-12-11 20:41:28

标签: spring-boot spring-kafka

当Kafka代理不可用时,我的spring boot 2.1.5消费者应用程序出现异常,但出现以下异常。它使用的是spring-kafka 2.2.6。我需要我的应用程序保持运转,并在kafka经纪人回来时继续消费。

例外:

org.springframework.context.ApplicationContextException: Failed to start bean
'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry';
nested exception is org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata

我已经尝试使用autostartup=false来使用@KafkaListener并使用CommandLineRunner来解决它,该应用程序不会关闭,但是当代理重新启动直到重新启动时,它不会消耗消息。

1 个答案:

答案 0 :(得分:1)

将容器属性misssingTopicsFatal设置为false,以防止在初始化期间尝试连接到代理。现在默认为false(在2.3.4和更高版本中)。

您可以使用autoStartup=false bean启动KafkaListenerEndpointRegistry容器-给侦听器一个id,并使用它从注册表中获取对该容器的引用。