文章目录
- Flink 2.0 编译
- 第一个问题 java 版本太低
- maven 版本太低
- maven 版本太高
- 开始编译
- 扩展多版本jdk 配置
Flink 2.0 编译
看到Flink2.0 出来了,想去玩玩,看看怎么样,当然第一件事,就是编译代码,但是没想到这么多问题,首先我们还是看一下Flink 2.0 有什么变化
在 2.0 版本中,Flink 引入了若干创新性功能,以应对实时数据处理的关键挑战,并满足现代应用(包括人工智能驱动的工作流)不断增长的需求。
-
分离式状态管理 架构使得 Flink 在云原生环境中更高效地利用资源,在确保高性能实时处理的同时将资源开销降至最低。
-
物化表 的引入和改进使用户能够专注于业务逻辑,无需深入了解流处理的复杂性以及流与批处理模式之间的差异,从而简化开发流程并提高生产力。批处理模式的优化为近实时或非实时处理场景提供了具有成本效益的替代方案,扩展了 Flink 对多样化应用场景的适应性。
-
此外,与 Apache Paimon 的深度集成强化了 流式湖仓 架构,使 Flink 成为实时数据湖应用场景的领先解决方案。
-
随着人工智能和大语言模型的不断崛起,对可扩展的实时数据处理解决方案的需求也在增长。Flink 2.0 在性能、资源效率和易用性方面的进步使其成为 人工智能工作流 的强大基础,确保 Flink 处在实时数据处理创新的前沿地位。
这些改进共同展示了 Flink 致力于满足现代数据应用不断变化的需求,这其中就包括将实时处理能力与人工智能驱动的系统相结合。
除了新功能外,Flink 2.0 还对已弃用的 API 和配置进行了全面清理,这可能导致某些接口和行为出现向后不兼容的变化。升级到此版本的用户应特别注意这些变化,以确保顺利迁移。
第一个问题 java 版本太低
java.lang.UnsupportedClassVersionError: com/puppycrawl/tools/checkstyle/api/AuditListener has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
这个问题很好解决,升级java 就可以了
主版本(Major Version) | 对应JDK版本 |
---|---|
52 | JDK 8 |
53 | JDK 9 |
54 | JDK 10 |
55 | JDK 11 |
maven 版本太低
Flink2.0 不支持maven3.6 了,所以必须升级,然后我就直接安装了最新的版本3.9.9
当然你也可以使用Flink2.0 项目中的maven wrapper
或者直接在idea 离配置如上所示,但是悄悄告诉你也不行
./mvnw clean package -DskipTests -Djdk11 -Pjava11-targetError: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.
Investigate or delete /Users/cz/workspace/git/flink/.mvn/wrapper/maven-wrapper.jar to attempt a clean download.
If you updated your Maven version, you need to update the specified wrapperSha256Sum property.
我也不知道flink 团队是怎么搞的,都不自己测试一下吗,不同版本的java 的命令如下
./mvnw clean package -DskipTests -Djdk21 -Pjava21-target
./mvnw clean package -DskipTests -Djdk17 -Pjava17-target
./mvnw clean package -DskipTests -Djdk11 -Pjava11-target
但是都报错,我们还是直接使用自己安装的maven 吧
maven 版本太高
我直接安装了3.9.9 ,打包的时候报错如下
Detected Maven Version: 3.9.9 is not in the allowed range [3.8.6,3.8.6].
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.1.0:enforce (enforce-maven) on project flink-parent: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]
这个我们直接去pom 文件里改吧,这里我在3.8.6 后面配置了3.9.9
开始编译
当然这个过程中,还是各种问题,当然我们还是一一解决了
mvn clean package -Dmaven.test.skip=true -Djdk17 -Pjava17-target
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:run (build-test-jars) on project flink-python: An Ant BuildException has occured: /Users/cz/workspace/git/flink/flink-python/target/test-classes does not exist.
[ERROR] around Ant part ...<jar basedir="/Users/cz/workspace/git/flink/flink-python/target/test-classes" destfile="/Users/cz/workspace/git/flink/flink-python/target/artifacts/testUdf1.jar" includes="**/TestScalarFunction1.class"/>... @ 4:206 in /Users/cz/workspace/git/flink/flink-python/target/antrun/build-main.xml
看这个报错我竟然有点茫然,我直接进入flink-python 模块去编译,成功了,但是在根项目下就失败
看这个报错,还是跟test 有关,看起来-Dmaven.test.skip=true
在python 这个项目中没有生效,导致代码没有编译,但是在尝试运行
这个模块我们可以去掉这个跳过测试的参数,就编译成功了
mvn clean package -Djdk17 -Pjava17-target -rf :flink-python
后面的模块,我们又把这个参数加上
mvn clean package -Dmaven.test.skip=true -Djdk17 -Pjava17-target -rf :flink-s3-fs-base
好坑呀,这里又说这个test jar 不存在,看起来test 的代码还得编译,不然后面的flink-s3-fs-hadoop 找不到依赖
mvn clean install -DskipTests -Djdk17 -Pjava17-target -rf :flink-s3-fs-base
扩展多版本jdk 配置
这里教大家一个如何本地部署多版本的java,并且随时切换,首先我们吧把下面的配置,配置到/etc/profile 或者是 ~/.bash_profile 文件中
这里由于我jdk8 是手动下载安装的,23和17 都是通过brew 安装的,所以并不在同一个目录下
JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
JAVA_23_HOME=/opt/homebrew/Cellar/openjdk/23.0.2
JAVA_17_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.15alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
alias jdk17='export JAVA_HOME=$JAVA_17_HOME'
alias jdk23='export JAVA_HOME=$JAVA_23_HOME'