1、查看 flink-smartsi-taskexecutor-0-smarsi.out 日誌發現如下異常信息
Error: VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
2、從異常信息中可知JVM 認為你嘗試使用的虛擬機選項 -XX:+UseG1GC 是一個實驗性(Experimental) 功能。
為了防止用户無意中使用可能不穩定的實驗功能,JVM要求必須顯式地“解鎖”這些選項。這就是為什麼它提示你必須通過 -XX:+UnlockExperimentalVMOptions 來啓用。
直接後果時由於 JVM 參數校驗失敗,Java 虛擬機根本無法創建,導致 Kafka 服務進程啓動失敗並退出。問題的根源在於 JVM 版本的變遷 和 Flink 默認配置的衝突。
由於使用的 Flink 比較新的版本,其 TaskManager 啓動腳本中默認的 JVM 參數配置包含了 -XX:+UseG1GC,但由於我們使用的是 JDK 8 比較低的版本,所以導致衝突。
3. 解決方案
因某些原因暫時無法升級 Java,可以修改 Flink 的 TaskManager 啓動腳本,增加解鎖實驗性選項的參數。
打開 bin/taskmanager.sh 文件,找到設置 JVM 參數的地方。通常你會在文件中看到類似這樣的代碼:
# if no other JVM options are set, set the GC to G1 if [ -z "${FLINK_ENV_JAVA_OPTS}" ] && [ -z "${FLINK_ENV_JAVA_OPTS_TM}" ]; then export JVM_ARGS="$JVM_ARGS -XX:+UseG1GC" fi
只需修改 JVM_ARGS 配置添加 -XX:+UnlockExperimentalVMOptions 即可:
export JVM_ARGS="$JVM_ARGS -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC"