FrankChen021 / bithon

An observability platform mainly for Java
Apache License 2.0
14 stars 4 forks source link

exception when installing interceptor to spring kafka #748

Closed FrankChen021 closed 3 months ago

FrankChen021 commented 3 months ago
2024-03-06 17:54:54.681 [main,null] ERROR ConstructorAfterAdvice - [bTxId: , bSpanId: , bMode: ] Exception occurs when executing onConstruct on interceptor [org.bithon.agent.plugin.apache.kafka.consumer.interceptor.ListenerConsumer$Ctor]: class jdk.proxy3.$Proxy593 cannot be cast to class org.apache.kafka.clients.consumer.KafkaConsumer (jdk.proxy3.$Proxy593 is in module jdk.proxy3 of loader org.springframework.boot.loader.LaunchedURLClassLoader @76f10035; org.apache.kafka.clients.consumer.KafkaConsumer is in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @76f10035) (JdkLogAdaptor.java:595)
java.lang.ClassCastException: class jdk.proxy3.$Proxy593 cannot be cast to class org.apache.kafka.clients.consumer.KafkaConsumer (jdk.proxy3.$Proxy593 is in module jdk.proxy3 of loader org.springframework.boot.loader.LaunchedURLClassLoader @76f10035; org.apache.kafka.clients.consumer.KafkaConsumer is in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @76f10035)
at org.bithon.agent.plugin.apache.kafka.consumer.interceptor.ListenerConsumer$Ctor.after(ListenerConsumer$Ctor.java:44)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.(KafkaMessageListenerContainer.java:951)
at org.springframework.kafka.listener.KafkaMessageListenerContainer.doStart(KafkaMessageListenerContainer.java:380)
at org.springframework.kafka.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:557)
at org.springframework.kafka.listener.ConcurrentMessageListenerContainer.doStart(ConcurrentMessageListenerContainer.java:231)
at org.springframework.kafka.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:557)
at org.springframework.integration.kafka.inbound.KafkaMessageDrivenChannelAdapter.doStart(KafkaMessageDrivenChannelAdapter.java:321)
at org.springframework.integration.endpoint.AbstractEndpoint.start(AbstractEndpoint.java:155)
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindConsumer(AbstractMessageChannelBinder.java:525)
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindConsumer(AbstractMessageChannelBinder.java:103)
at org.springframework.cloud.stream.binder.AbstractBinder.bindConsumer(AbstractBinder.java:144)
at org.springframework.cloud.stream.binding.BindingService.doBindConsumer(BindingService.java:186)
at org.springframework.cloud.stream.binding.BindingService.bindConsumer(BindingService.java:139)
at org.springframework.cloud.stream.binding.AbstractBindableProxyFactory.createAndBindInputs(AbstractBindableProxyFactory.java:98)
at org.springframework.cloud.stream.binding.InputBindingLifecycle.doStartWithBindable(InputBindingLifecycle.java:58)
at java.base/java.util.LinkedHashMap$LinkedValues.forEach(LinkedHashMap.java:647)
at org.springframework.cloud.stream.binding.AbstractBindingLifecycle.start(AbstractBindingLifecycle.java:59)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:179)
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:357)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:156)
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:124)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:965)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:618)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:738)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:440)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:324)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1317)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)
...
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:95)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
FrankChen021 commented 3 months ago

Not observed on the demo project which uses spring boot 3.2

FrankChen021 commented 3 months ago

Conditions to reproduce this problem:

  1. spring kafka 3.0.x, like 3.0.5(which release is the lowest is not confirmed)
  2. The DefaultKafkaConsumerFactory is used and there're listeners registered on this factory object