java - Apache Flink:提交 Flink 作业时出现 NoSuchMethodError
问题描述
我正在尝试向我的 flink 集群提交作业,但我一直遇到以下错误:
2021-05-03 17:14:32
java.lang.NoSuchMethodError: org/apache/flink/api/common/state/OperatorStateStore.getSerializableListState(Ljava/lang/String;)Lorg/apache/flink/api/common/state/ListState; (loaded from file:/opt/flink/lib/flink-dist_2.11-1.11.3.jar by jdk.internal.loader.ClassLoaders$AppClassLoader@c7a20636) called from class org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase (loaded from file:/tmp/blobStore-d962f26c-fc16-4ff4-89da-4d86ed60c35e/job_fdc8c054e20b751b6a6f549af602c3d2/blob_p-5fcb7b854786da736df1bbd47aa02017c714f655-34f669043602e72ef3faf32247ab2b17 by org.apache.flink.util.ChildFirstClassLoader@3952d030).
at org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.initializeState(FlinkKafkaConsumerBase.java:858)
at org.apache.flink.streaming.util.functions.StreamingFunctionUtils.tryRestoreFunction(StreamingFunctionUtils.java:185)
at org.apache.flink.streaming.util.functions.StreamingFunctionUtils.restoreFunctionState(StreamingFunctionUtils.java:167)
at org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator.initializeState(AbstractUdfStreamOperator.java:96)
at org.apache.flink.streaming.api.operators.StreamOperatorStateHandler.initializeOperatorState(StreamOperatorStateHandler.java:106)
at org.apache.flink.streaming.api.operators.AbstractStreamOperator.initializeState(AbstractStreamOperator.java:260)
at org.apache.flink.streaming.runtime.tasks.OperatorChain.initializeStateAndOpenOperators(OperatorChain.java:290)
at org.apache.flink.streaming.runtime.tasks.StreamTask.lambda$beforeInvoke$1(StreamTask.java:506)
at org.apache.flink.streaming.runtime.tasks.StreamTask$$Lambda$274/0x0000000014046b10.run(Unknown Source)
at org.apache.flink.streaming.runtime.tasks.StreamTaskActionExecutor$SynchronizedStreamTaskActionExecutor.runThrowing(StreamTaskActionExecutor.java:92)
at org.apache.flink.streaming.runtime.tasks.StreamTask.beforeInvoke(StreamTask.java:475)
at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:526)
at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:721)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:546)
at java.base/java.lang.Thread.run(Thread.java:836)
我相信这个问题与版本不匹配有关(我假设与我正在使用的 kafka 连接器有关),但我没有任何运气解决它。我尝试将我的 flink 版本设置为与我的集群(1.11.3)相同,但错误仍然存在。我也不完全确定如何使用 maven-shade-plugin 来解决这个问题。任何帮助,将不胜感激!
解决方案
删除不推荐使用的状态访问方法 ( FLINK-17376 )
我们删除了不推荐使用的状态访问方法
RuntimeContext#getFoldingState()
,OperatorStateStore#getSerializableListState()
并且OperatorStateStore#getOperatorState()
. 这意味着一些针对 Flink 1.10 编译的代码将不适用于 Flink 1.11 集群。这方面的一个例子是我们内部使用的 Kafka 连接器OperatorStateStore.getSerializableListState
。
在升级到新版本的 Flink 时,您应该总是期望重新编译您的用户 jar。不保证跨次要版本更新(例如,从 1.10.x 到 1.11.y)的二进制兼容性。(在补丁版本中引入破坏性更改是不寻常的,但它已经发生过一两次。)
回顾一下:所涉及的一切——你的用户 jar、它的依赖项和集群都应该使用相同版本的 Flink。
推荐阅读
- javascript - 未销毁的 Angular DOM 元素
- javascript - 为什么条形图未与 y 轴对齐
- excel - Mac 上的 Excel:如何访问 DevTools 以获取对话框内容?
- c# - 在反序列化之前在客户端应用程序获取 .NET Remoting XML SOAP 消息
- python - Selenium 没有获取元素的文本
- apache-kafka - KCQL 查询将 Influx 线路协议点从 kafka 主题推送到 InfluxDB
- apache - 网站安全:Web服务器应该为spring boot打开一个特定的端口还是使用代理来转发?
- c - 下面代码中的 EOF 是什么?
- coq - Coq:卡住使用子类型
- multithreading - 工作线程在 Qt 中的无限循环期间停止处理事件