Kafka应用程序启动时无法配置主题,但稍后可以通信

Pau*_*kin 4 apache-kafka spring-boot spring-kafka

我们有一个使用 spring-kafka (2.2.5.RELEASE) 的 Spring Boot 应用程序,在启动时总是出现此错误:

Could not configure topics 
org.springframework.kafka.KafkaException: Timed out waiting to get existing 
topics; nested exception is java.util.concurrent.TimeoutException
Run Code Online (Sandbox Code Playgroud)

但是,应用程序继续启动:

org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] 
INFO  o.s.k.l.KafkaMessageListenerContainer - partitions revoked: []
INFO  o.s.k.l.KafkaMessageListenerContainer - partitions assigned: [my-reply-topic-1]
INFO  o.s.k.l.KafkaMessageListenerContainer - partitions assigned: [my-request-topic-0]
INFO  o.s.b.w.e.tomcat.TomcatWebServer -
Tomcat started on port(s): 8080 (http) with context path ''
Run Code Online (Sandbox Code Playgroud)

此时,应用程序已按预期与 Kafka 进行交互。

我们希望保持日志干净,因此我们想了解为什么会抛出此异常。另外,这有点令人困惑,因为当我们转移到应用程序和 kafka 代理之间尚未建立网络的不同环境时,我们会得到相同的错误,但应用程序无法运行。当确实存在问题并且可以忽略它时,在尝试解决连接问题时出现相同的异常是令人厌烦的。

有没有办法在应用程序启动时确定是否已与 Kafka 建立连接,而不仅仅是等待超时消息(无论如何,这可能是一个转移注意力的消息)?

Gar*_*ell 5

如果主题已经存在,请NewTopic从应用程序上下文中删除任何 bean,并且KafkaAdmin根本不会尝试连接到代理。