簡體   English   中英

Spring 僅在 application.properties 中設置配置時,使用 Kafka Streams 啟動會引發 ClassCastException

[英]Spring Boot with Kafka Streams throws ClassCastException only when set configuration in application.properties

我在使用 Kafka Streams 啟動 Spring 時遇到問題。

有兩種方法可以設置配置 Kafka Streams。

第一種方法是像這樣使用@Bean 設置配置。

@Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME)
KafkaStreamsConfiguration kStreamsConfig() {
    Map<String, Object> props = new HashMap<>();
    props.put(APPLICATION_ID_CONFIG, "kafka-streams");
    props.put(BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");

    return new KafkaStreamsConfiguration(props);
}

當我使用這種方式並在 k8s 上部署應用程序時,它運行良好並且不會拋出任何異常。

但是,在第二種方式中使用 application.properties 這樣

// application.properties

spring.kafka.streams.bootstrap-servers=localhost:9092
spring.kafka.streams.application-id=kafka-streams

當我在 k8s 上以這種方式部署應用程序時,應用程序也運行良好,但拋出 ClassCastException!

20220728 18:08:17 [XTRA-KAFKA-PRPDUCER11 main] class java.util.ArrayList cannot be cast to class java.lang.String (java.util.ArrayList and java.lang.String are in module java.base of loader 'bootstrap') java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class java.lang.String (java.util.ArrayList and java.lang.String are in module java.base of loader 'bootstrap')
java.lang.ClassCastException
    org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:666)
    org.apache.kafka.streams.processor.internals.DefaultKafkaClientSupplier.getRestoreConsumer(DefaultKafkaClientSupplier.java:49)
    org.apache.kafka.streams.processor.internals.StreamThread.create(StreamThread.java:343)
    org.apache.kafka.streams.KafkaStreams.createAndAddStreamThread(KafkaStreams.java:956)
    org.apache.kafka.streams.KafkaStreams.<init>(KafkaStreams.java:948)
    org.apache.kafka.streams.KafkaStreams.<init>(KafkaStreams.java:845)
    org.apache.kafka.streams.KafkaStreams.<init>(KafkaStreams.java:751)
    org.springframework.kafka.config.StreamsBuilderFactoryBean.start(StreamsBuilderFactoryBean.java:349)
    org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178)
    org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54)
    org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356)
    java.base/java.lang.Iterable.forEach(Iterable.java:75)
    org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155)
    org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123)
    org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)
    org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
    org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)
    org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
    org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
    org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
    org.springframework.boot.SpringApplication.run(SpringApplication.java:1295)
    com.example.springkafka.SpringKafkaApplication.main(SpringKafkaApplication.java:10)
    java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    java.base/java.lang.reflect.Method.invoke(Method.java:577)
    org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
    org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
    org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
    org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)

(引導服務器就是一個例子。在我的應用程序中,它不是 localhost:9092)

此外,在使用 IntelliJ 的本地環境中,兩種方式都沒有異常。

我想知道為什么會出現這個問題。 以及如何解決這個問題..

最后,我決定忽略這個異常。

因為,當拋出異常時,應用程序不會關閉或運行良好。

此外,在本地環境中,不會拋出異常。

我認為我的k8s有問題。

感謝所有評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM