flink1.16.0 动态加载udf包(一)
环境:
- flink版本:1.16.0
- flink部署模式:session 模式。在物理机上直接部署flink docker,job和task都是1
- jdk:1.8
加载类和注册udf
tableEnvironment.executeSql("add JAR '" + jarPath + "'");
tableEnvironment.executeSql("CREATE FUNCTION " + udfName + " AS '" + classPath + "'");
碰到问题
Caused by: java.lang.ClassCastException: cannot assign instance of
org.apache.kafka.clients.consumer.OffsetResetStrategy to field org.apache.flink.connector.kafka.source.enumerator.initializer.ReaderHandledOffsetsInitializer.offsetResetStrategy of type
org.apache.kafka.clients.consumer.OffsetResetStrategy in instance of
org.apache.flink.connector.kafka.source.enumerator.initializer.ReaderHandledOffsetsInitializer
问题解决:
在flink-conf中添加 classloader.resolve-order: parent-first
最主要的就是,需要udf包中不能有多余的依赖, 不然很容易导致依赖冲突.
- 所以udf打包是都是provided ,依赖统一放入flink/lib下统一管理
如果有错误,欢迎指正、交流 ,谢谢!