文章目錄
- 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'