考虑基于ARM芯片的Debian 11上原生安装Apache Flink,不用docker镜像安装。查了一下ARM64(aarch64)架构的 Debian 11(Bullseye)完全可以正常安装和运行 Apache Flink 2.2.1,32 位 ARM 架构则不再支持。
一、核心兼容性说明
Flink 原生支持 ARM64 架构
Flink 从 1.13 版本开始官方原生适配 ARM64 架构,2.x 系列延续并完善了该支持。Flink 核心基于 JVM 字节码实现,本身跨平台;内置的 RocksDB 状态后端、Netty 网络栈等依赖原生库的组件,官方也已提供 ARM64 版本的预编译原生库,同一个官方二进制发行包可直接在 x86_64 和 ARM64 平台解压运行,无需单独下载 ARM 专属安装包。
官方 Docker 镜像也同步提供
arm64v8架构标签,进一步验证了架构兼容性。
Debian 11 ARM64 满足基础依赖
Debian 11 对 ARM64 架构有完整的官方支持,软件源中原生提供 OpenJDK 11,也可通过 backports 源安装 OpenJDK 17,完全匹配 Flink 2.2.1 的运行要求:
Flink 2.x 官方推荐运行版本为 Java 17,兼容 Java 11
已不再支持 Java 8,请勿使用低版本 JDK
二、简要安装步骤
1. 安装兼容的 JDK
# 更新源
apt update
# 方案1:安装Debian 11默认自带的OpenJDK 11(兼容可用)
apt install -y openjdk-11-jdk
# 方案2:安装推荐的OpenJDK 17(需启用backports源)
echo "deb http://deb.debian.org/debian bullseye-backports main" >> /etc/apt/sources.list
apt update
apt install -y openjdk-17-jdk
安装后执行 java -version 确认版本正常。
2. 下载并解压 Flink 2.2.1
# 下载官方二进制包(Scala 2.12版本,通用)
wget https://archive.apache.org/dist/flink/flink-2.2.1/flink-2.2.1-bin-scala_2.12.tgz
# 解压到指定目录
tar -zxf flink-2.2.1-bin-scala_2.12.tgz -C /opt/
mv /opt/flink-2.2.1 /opt/flink
3. 配置环境变量并验证
# 配置环境变量
echo "export FLINK_HOME=/tzdata/flink-2.2.1" >> /etc/profile
echo "export PATH=\$PATH:\$FLINK_HOME/bin" >> /etc/profile
source /etc/profile
# 启动本地单机集群验证
/opt/flink/bin/start-cluster.sh
# 查看进程,出现JobManager和TaskManager即为成功
jps
启动后可通过 http://服务器IP:8081 访问 Flink Web UI。
三、常见错误处理
1. 启动时无法找到JAVA_HOME
sudo ./bin/start-cluster.sh
Please specify JAVA_HOME. Either in Flink config ./conf/config.yaml or as system-wide JAVA_HOME.解决方案
编辑 /opt/flink/conf/config.yaml,直接写成一行,不要拆成YAML的嵌套格式 env → java → home 的三层嵌套结构,启动脚本无法识别这种嵌套格式,会继续提示找不到 JAVA_HOME。
yaml
env.java.home: "/tzdata/jdk-17.0.16"2.Flink 的 Shell 启动脚本找不到 java 命令(Flink 1.x问题)
按照如上第1个问题的处理方式解决后,发现又有新的报错
sudo ./bin/start-cluster.sh
/tzdata/flink-2.2.1/bin/config.sh:行290: > 17 :语法错误: 需要操作数 (错误符号是 "> 17 ")
Starting cluster.
/tzdata/flink-2.2.1/bin/config.sh:行290: > 17 :语法错误: 需要操作数 (错误符号是 "> 17 ")
[ERROR] The execution result is empty.
[ERROR] Could not get JVM parameters and dynamic configurations properly.
[ERROR] Raw output from BashJavaUtils:
/tzdata/flink-2.2.1/bin/bash-java-utils.sh:行114: java:未找到命令
/tzdata/flink-2.2.1/bin/config.sh:行290: > 17 :语法错误: 需要操作数 (错误符号是 "> 17 ")
[ERROR] The execution result is empty.
[ERROR] Could not get JVM parameters and dynamic configurations properly.
[ERROR] Raw output from BashJavaUtils:
/tzdata/flink-2.2.1/bin/bash-java-utils.sh:行114: java:未找到命令报错原因
这个报错的根源是 Flink 的 Shell 启动脚本找不到 java 命令,后续的 “>17 语法错误” 是连锁反应 —— 脚本尝试获取 Java 版本号失败,拿到空值后做数值比较就触发了语法错误。
这里需要纠正一个之前的细节:config.yaml 里的 env.java.home 是 Flink Java 进程运行时读取的配置,但启动初期的 bash 脚本并不会解析 yaml 文件来找 java 命令,所以这个配置管不到启动脚本的 Java 定位逻辑。
解决方案
Flink 的 conf 目录下有专门的环境变量配置文件 flink-env.sh,启动脚本会主动加载这个文件里的环境变量,完全不受 sudo 环境重置影响。如果没有这个文件则创建即可
# 编辑文件
vi flink-env.sh
增加如下内容
export JAVA_HOME=/tzdata/jdk-17.0.16
export PATH=$JAVA_HOME/bin:$PATH保存退出即可。
补充:config.yaml 里的 env.java.home 建议保留,两个地方都配置,分别覆盖启动脚本阶段和进程运行阶段。
重新启动验证
回到 Flink 根目录,重新执行启动命令:
cd /tzdata/flink-2.2.1
sudo ./bin/start-cluster.sh
启动成功后,执行 sudo jps 能看到以下两个进程即正常:
StandaloneSessionClusterEntrypoint(JobManager)TaskManagerRunner(TaskManager)
启动后默认可通过 http://服务器IP:8081 访问 Flink Web UI。
3.Flink 的 Shell 启动脚本找不到 java 命令(Flink 2.x问题)
Flink 2.x 对启动脚本做了重构,官方默认移除了自动加载 flink-env.sh 的逻辑,所以你创建的文件根本不会被脚本读取,环境变量自然不生效。脚本在执行到 Java 版本校验时,始终找不到 java 命令,拿到空值后触发了 > 17 的数值比较语法错误,属于连锁报错。
解决方案
直接在 Flink 核心脚本最开头注入 JDK 路径,保证脚本执行第一时间就能找到 Java。
vim /tzdata/flink-2.2.1/bin/config.sh
在文件最顶部第一行添加两行配置:
export JAVA_HOME=/tzdata/jdk-17.0.16
export PATH=$JAVA_HOME/bin:$PATH保存退出后重新启动即可,该方法 100% 生效,仅影响当前 Flink 实例。
原文链接
欢迎访问 小易撩挨踢