运行Flink 1.17.0的Sentence Encoder示例时遇RpcLoaderException错误
问题描述
我尝试运行Sentence Encoder示例,使用Apache Flink 1.17.0版本,但启动应用时出现以下错误:
Exception in thread "main" org.apache.flink.runtime.rpc.exceptions.RpcLoaderException: Could not load RpcSystem. at org.apache.flink.runtime.rpc.RpcSystem.load(RpcSystem.java:106) at org.apache.flink.runtime.minicluster.MiniCluster.lambda$new$0(MiniCluster.java:253) at org.apache.flink.runtime.minicluster.MiniCluster.start(MiniCluster.java:339) at org.apache.flink.client.program.PerJobMiniClusterFactory.submitJob(PerJobMiniClusterFactory.java:77)
我不清楚错误原因,即使已在Windows上用ncat启动了简单文本服务器。我的pom.xml配置如下:
<dependencies> <dependency> <groupId>ai.djl</groupId> <artifactId>api</artifactId> <version>0.23.0</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java</artifactId> <version>1.17.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-core</artifactId> <version>1.17.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.17.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-runtime</artifactId> <version>1.17.1</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-shaded-asm-9</artifactId> <version>9.5-17.0</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-metrics-core</artifactId> <version>1.17.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-shaded-guava</artifactId> <version>30.1.1-jre-16.1</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-clients</artifactId> <version>1.17.1</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-rpc-core</artifactId> <version>1.17.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-optimizer</artifactId> <version>1.17.1</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-shaded-netty</artifactId> <version>4.1.91.Final-17.0</version> </dependency> <dependency> <groupId>com.esotericsoftware</groupId> <artifactId>kryo</artifactId> <version>5.5.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.7</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> </dependencies>
调试发现错误发生在RpcSystem类执行Iterator iterator = ServiceLoader.load(RpcSystemLoader.class).iterator();语句时,目前没找到相关讨论主题。
解决方案
这个错误是Flink RPC系统实现依赖缺失导致的,ServiceLoader无法找到对应的RpcSystemLoader实现类,可按以下步骤修复:
- 调整
flink-rpc-core依赖范围:移除该依赖的<scope>provided</scope>标签,本地运行MiniCluster时需要该依赖在classpath中生效:
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-rpc-core</artifactId> <version>1.17.1</version> </dependency>
- 添加RPC实现依赖:Flink默认使用Netty作为RPC实现,需引入对应依赖(版本与Flink保持一致):
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-rpc-netty</artifactId> <version>1.17.1</version> </dependency>
统一Flink版本:你使用的Flink运行环境是1.17.0,但pom.xml中依赖版本为1.17.1,版本不一致可能引发兼容性问题,建议统一为同一版本。
检查ServiceLoader配置:若上述步骤无效,确认依赖包中存在
META-INF/services/org.apache.flink.runtime.rpc.RpcSystemLoader文件,该文件应指向NettyRpcSystemLoader实现类。
内容的提问来源于stack exchange,提问作者Taras Danylchenko
相关产品推荐
相关产品推荐

