pulsar
pulsar copied to clipboard
[Bug] ClassNotFoundException error occurred when using Function development in the kubernetes cluster
Search before asking
- [X] I searched in the issues and found nothing similar.
Read release policy
- [X] I understand that unsupported versions don't get bug fixes. I will attempt to reproduce the issue on a supported version of Pulsar client and Pulsar broker.
Version
- kubernetes: 1.28
- jdk: 17
- pulsar: 3.2.1
- pulsar-functions-pulsarctl-java-runner: 3.2.1.2
Minimal reproduce step
- Develop using the Extended Pulsar Functions SDK for Java and connect to the Redis cluster
- Edit yaml file
- kubectl apply -f function.yaml
What did you expect to see?
The function can connect to the Redis cluster and work properly.
What did you see instead?
2024-04-15T06:18:32,716+0000 [public/default/demo-function-las-auth-0] ERROR org.apache.pulsar.functions.instance.JavaInstanceRunnable - Sink open produced uncaught exception:
java.lang.ClassNotFoundException: com.alibaba.fastjson2.JSONObject
at java.net.URLClassLoader.findClass(URLClassLoader.java:445) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:592) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?]
at org.apache.pulsar.common.util.Reflections.loadClass(Reflections.java:310) ~[io.streamnative-pulsar-common-3.2.1.2.jar:3.2.1.2]
at org.apache.pulsar.functions.sink.PulsarSink.initializeSchema(PulsarSink.java:437) ~[io.streamnative-pulsar-functions-instance-3.2.1.2.jar:3.2.1.2]
at org.apache.pulsar.functions.sink.PulsarSink.open(PulsarSink.java:362) ~[io.streamnative-pulsar-functions-instance-3.2.1.2.jar:3.2.1.2]
at org.apache.pulsar.functions.instance.JavaInstanceRunnable.setupOutput(JavaInstanceRunnable.java:1070) ~[io.streamnative-pulsar-functions-instance-3.2.1.2.jar:?]
at org.apache.pulsar.functions.instance.JavaInstanceRunnable.setup(JavaInstanceRunnable.java:261) ~[io.streamnative-pulsar-functions-instance-3.2.1.2.jar:?]
at org.apache.pulsar.functions.instance.JavaInstanceRunnable.run(JavaInstanceRunnable.java:305) ~[io.streamnative-pulsar-functions-instance-3.2.1.2.jar:?]
at java.lang.Thread.run(Thread.java:840) ~[?:?]
2024-04-15T06:18:32,725+0000 [public/default/demo-function-las-auth-0] ERROR org.apache.pulsar.functions.instance.JavaInstanceRunnable - [public/default/demo-function-las-auth:0] Uncaught exception in Java Instance
java.lang.ClassNotFoundException: com.alibaba.fastjson2.JSONObject
at java.net.URLClassLoader.findClass(URLClassLoader.java:445) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:592) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?]
at org.apache.pulsar.common.util.Reflections.loadClass(Reflections.java:310) ~[io.streamnative-pulsar-common-3.2.1.2.jar:3.2.1.2]
at org.apache.pulsar.functions.sink.PulsarSink.initializeSchema(PulsarSink.java:437) ~[io.streamnative-pulsar-functions-instance-3.2.1.2.jar:3.2.1.2]
at org.apache.pulsar.functions.sink.PulsarSink.open(PulsarSink.java:362) ~[io.streamnative-pulsar-functions-instance-3.2.1.2.jar:3.2.1.2]
at org.apache.pulsar.functions.instance.JavaInstanceRunnable.setupOutput(JavaInstanceRunnable.java:1070) ~[io.streamnative-pulsar-functions-instance-3.2.1.2.jar:?]
at org.apache.pulsar.functions.instance.JavaInstanceRunnable.setup(JavaInstanceRunnable.java:261) ~[io.streamnative-pulsar-functions-instance-3.2.1.2.jar:?]
at org.apache.pulsar.functions.instance.JavaInstanceRunnable.run(JavaInstanceRunnable.java:305) ~[io.streamnative-pulsar-functions-instance-3.2.1.2.jar:?]
at java.lang.Thread.run(Thread.java:840) ~[?:?]
Anything else?
apiVersion: compute.functionmesh.io/v1alpha1
kind: Function
metadata:
name: demo-function-las-auth
namespace: pulsar
spec:
image: streamnative/pulsar-functions-pulsarctl-java-runner:3.2.1.2 # using java function runner
className: com.audit.function.handler.LasAuthFunction
forwardSourceMessageProperty: true
maxPendingAsyncRequests: 1000
replicas: 1
maxReplicas: 5
logTopic: persistent://demo-tenants/log-namespace/function-las-auth-logs
input:
topics:
- persistent://demo-tenants/log-namespace/las-auth
typeClassName: "[Ljava.lang.String;"
output:
topic: persistent://demo-tenants/log-namespace/las-auth-done
typeClassName: "com.alibaba.fastjson2.JSONObject"
funcConfig:
redis.url: redis-cluster.redis-cluster.svc.cluster.local
redis.password: ******
secretsMap:
"redis-ca-certs":
path: "redis-ca-certs"
key: "ca.crt"
"redis-tls-cert":
path: "redis-tls-cert"
key: "tls.crt"
"redis-tls-key":
path: "redis-tls-key"
key: "tls.key"
pulsar:
pulsarConfig: "demo-pulsar"
authSecret: "pulsar-auth"
tlsConfig:
enabled: true
allowInsecure: true
hostnameVerification: false
certSecretName: pulsar-tls-proxy
certSecretKey: ""
resources:
requests:
cpu: "2"
memory: 4G
limits:
cpu: "2"
memory: 4G
java:
extraDependenciesDir: random-dir/
jar: demo-function-1.1-SNAPSHOT.jar # the package will download as this filename.
log:
level: "debug"
jarLocation: function://demo-tenants/log-namespace/[email protected] # function package URL
javaOpts:
- "--add-opens java.base/sun.net=ALL-UNNAMED"
- "--add-opens java.management/sun.management=ALL-UNNAMED"
autoAck: true
---
apiVersion: v1
kind: ConfigMap
metadata:
name: demo-pulsar
namespace: pulsar
data:
webServiceURL: https://pulsar-proxy.pulsar.svc.cluster.local:443
brokerServiceURL: pulsar+ssl://pulsar-proxy.pulsar.svc.cluster.local:6651
---
apiVersion: v1
metadata:
name: pulsar-auth
namespace: pulsar
data:
clientAuthenticationPlugin: ******
clientAuthenticationParameters: ******
kind: Secret
type: Opaque
Are you willing to submit a PR?
- [ ] I'm willing to submit a PR!
@lhotari @nlu90 Hope to receive help, thank you very much!