web-dev-qa-db-fra.com

IllegalStateException: le (s) sujet (s) [XYZ] est / sont absent (s) et missingTopicsFatal est vrai

J'ai un Spring Boot application qui essaie de lire à partir d'une rubrique locale Kafka.

L'application commence à tourner, s'arrête pendant 2 minutes et génère l'erreur suivante:

19-11-10 14:49:24.700  INFO 20476 --- [  restartedMain] o.a.kafka.common.utils.AppInfoParser     : Kafka startTimeMs: 1573390164696
2019-11-10 14:51:24.793  WARN 20476 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry'; nested exception is Java.lang.IllegalStateException: Topic(s) [XYZ] is/are not present and missingTopicsFatal is true
2019-11-10 14:51:24.795  INFO 20476 --- [  restartedMain] o.s.s.c.ThreadPoolTaskScheduler          : Shutting down ExecutorService 'taskScheduler'
2019-11-10 14:51:24.796  INFO 20476 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
2019-11-10 14:51:24.810  INFO 20476 --- [  restartedMain] o.Apache.catalina.core.StandardService   : Stopping service [Tomcat]
2019-11-10 14:51:24.837  INFO 20476 --- [  restartedMain] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-11-10 14:51:24.844 ERROR 20476 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed

org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry'; nested exception is Java.lang.IllegalStateException: Topic(s) [XYZ] is/are not present and missingTopicsFatal is true
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.Java:185) ~[spring-context-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.Java:53) ~[spring-context-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.Java:360) ~[spring-context-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.Java:158) ~[spring-context-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.Java:122) ~[spring-context-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.Java:894) ~[spring-context-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.Java:162) ~[spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:553) ~[spring-context-5.2.1.RELEASE.jar:5.2.1.RELEASE]    
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.Java:141) ~[spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]  
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:747) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE] 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.Java:397) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]  
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:315) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1226) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]    
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1215) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]    
    at com.example.main(NyApplication.Java:38) [classes/:na]    
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_161]  
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62) ~[na:1.8.0_161]    
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43) ~[na:1.8.0_161]    
    at Java.lang.reflect.Method.invoke(Method.Java:498) ~[na:1.8.0_161] 
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.Java:49) [spring-boot-devtools-2.2.0.RELEASE.jar:2.2.0.RELEASE]    
Caused by: Java.lang.IllegalStateException: Topic(s) [ZYX] is/are not present and missingTopicsFatal is true    
    at org.springframework.kafka.listener.AbstractMessageListenerContainer.checkTopics(AbstractMessageListenerContainer.Java:366) ~[spring-kafka-2.3.3.RELEASE.jar:2.3.3.RELEASE]   
    at org.springframework.kafka.listener.ConcurrentMessageListenerContainer.doStart(ConcurrentMessageListenerContainer.Java:136) ~[spring-kafka-2.3.3.RELEASE.jar:2.3.3.RELEASE]   
    at org.springframework.kafka.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.Java:323) ~[spring-kafka-2.3.3.RELEASE.jar:2.3.3.RELEASE] 
    at org.springframework.kafka.config.KafkaListenerEndpointRegistry.startIfNecessary(KafkaListenerEndpointRegistry.Java:309) ~[spring-kafka-2.3.3.RELEASE.jar:2.3.3.RELEASE]  
    at org.springframework.kafka.config.KafkaListenerEndpointRegistry.start(KafkaListenerEndpointRegistry.Java:256) ~[spring-kafka-2.3.3.RELEASE.jar:2.3.3.RELEASE] 
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.Java:182) ~[spring-context-5.2.1.RELEASE.jar:5.2.1.RELEASE]  
    ... 19 common frames omitted    `

kafka s'exécute dans un menu fixe sur l'ordinateur local:

 docker run --detach --name kafka -p 2181:2181 -p 9092:9092 --env ADVERTISED_Host=192.168.1.89 --env ADVERVTISED_PORT=9092 --env AUTO.CREATE.TOPICS.ENABLE spotify/kafka

Lorsque bash dans le conteneur

docker exec -it 1234567896b5 bash

Je peux voir le sujet:

$/opt/kafka_2.11-0.10.1.0/bin# ./kafka-topics.sh --list --zookeeper localhost:2181
$XYZ

Le sujet a été créé avec cette commande:

./kafka-topics.sh --zookeeper  localhost:2181 --create --replication-factor 1 --partitions 3 --topic XYZ

Et je l'ai dans le application.yml de l'application (également essayé avec le port 9092):

spring:
  kafka:
consumer:
  bootstrap-servers: localhost:2181
  group-id: group_id
  auto-offset-reset: earliest
  key-deserializer: org.Apache.kafka.common.serialization.StringDeserializer
  value-deserializer: org.Apache.kafka.common.serialization.StringDeserializer
producer:
  bootstrap-servers: localhost:2181
  key-serializer: org.Apache.kafka.common.serialization.StringSerializer
  value-serializer: org.Apache.kafka.common.serialization.StringSerializer
3
riorio

Votre configuration utilise Zookeeper, pas Kafka comme serveurs bootstrap

Utilisez le port 9092, pas 2181

De plus, ce conteneur Spotify n'est pas maintenu, donc je suggère d'en trouver un plus récent

1
cricket_007

Cela pourrait aider quelqu'un à l'avenir. J'essaie de résoudre cette erreur Topic(s) [yourTopicName] is/are not present and missingTopicsFatal is true.

Vous devrez peut-être ajouter un bean dans votre configuration. J'ai eu cette erreur et c'était ma solution - en ajoutant un bean de NewTopic.

@Bean
public NewTopic adviceTopic() {
    return new NewTopic("user", 3, this.replicationFactor);
}
1

Ce n'est peut-être pas la réponse à la question, mais je pose cela pour que cela puisse être utile à quelqu'un d'autre.

J'ai rencontré la même exception même lorsque j'ai utilisé le numéro de port approprié dans la configuration (9092)

Voici le stacktrace.

    Java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.Java:132)
....

Caused by: org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry'; nested exception is Java.lang.IllegalStateException: Topic(s) [my-cute-topic] is/are not present and missingTopicsFatal is true

La solution

J'ai juste créé le sujet dans ma kafka locale et cela a bien fonctionné.

0
Aryan Venkat