当 kafka 代理不可用时,如何防止 运行 spring 引导应用程序关闭?

how to prevent a running spring boot application from going down when kafka broker becomes unavailable?

我的 spring boot 2.1.5 消费者应用程序在 Kafka 代理变得不可用时出现以下异常。它正在使用 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

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

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

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