本地运行Flink对接Google PubSub遇InaccessibleObjectException错误求助
解决Apache Flink与Google PubSub交互时的InaccessibleObjectException问题
1. 补充缺失的VM开放参数
你遇到的错误明确指向java.util.concurrent.atomic包未向未命名模块开放,之前添加的参数只覆盖了java.util和java.lang,需要补充对应包的开放配置:
--add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED
完整的VM参数应调整为:
--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED
注意:如果是用IDE本地运行,要确保该参数添加到运行配置的VM Options中;如果是通过Flink脚本启动,需要修改flink-conf.yaml中的env.java.opts参数,将配置传递给Flink任务进程。
2. 校验Flink与PubSub连接器的版本匹配度
Flink核心版本和Google PubSub连接器版本必须严格对应,版本不兼容会触发大量反射兼容性问题:
- 比如Flink 1.15.x需搭配
flink-connector-gcp-pubsub-1.15.x,Flink 1.17.x搭配flink-connector-gcp-pubsub-1.17.x - 若使用较新的Flink版本(如1.17+),建议使用Java 17而非Java 11,新版本Flink对Java 17的模块系统适配更完善
3. 排查并解决依赖冲突
项目中重复或冲突的依赖(尤其是Guava、Google Cloud客户端库)是触发这类反射错误的常见原因:
- 用Maven或Gradle命令查看依赖树:
# Maven mvn dependency:tree # Gradle ./gradlew dependencies - 若发现多版本Guava,强制指定与Flink兼容的版本(例如Flink 1.15对应Guava 30.1.1-jre),在依赖管理中添加排除规则:
<!-- Maven示例 --> <dependencyManagement> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1.1-jre</version> </dependency> </dependencies> </dependencyManagement>
4. 尝试扩展模块开放配置(若上述步骤无效)
如果仍未解决,可添加--add-exports参数导出目标包,配合--add-opens彻底开放反射访问:
--add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-exports java.base/java.util.concurrent.atomic=ALL-UNNAMED
内容的提问来源于stack exchange,提问作者SRJ
相关产品推荐
相关产品推荐

