苹果M1设备搭建Flink 1.13 Playground时maven镜像构建失败如何解决
问题解决方法
方案1:使用Rosetta模拟x86_64架构运行(无需修改镜像配置,优先推荐)
- 先打开Docker Desktop设置,进入
Features in Development页面,勾选Use Rosetta for x86/amd64 emulation on Apple Silicon,保存后重启Docker生效 - 直接在运行docker-compose的命令前添加架构指定参数,不需要修改任何原有Dockerfile或docker-compose配置:
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker-compose up -d --build
该方案走系统Rosetta2转译运行所有x86架构镜像,完全兼容官方原有配置,不会出现后续Kafka无消息、类找不到的异常。
方案2:全量替换为ARM64原生镜像(性能更高)
如果不想用转译运行,可以将所有依赖镜像替换为原生支持ARM64架构的版本:
- 替换Dockerfile中的基础镜像
- builder阶段修改为:
FROM maven:3.8.6-jdk-8-slim AS builder,该版本官方已提供ARM64构建包 - 运行阶段Flink基础镜像修改为:
FROM flink:1.13.6-scala_2.12-java8,高版本的1.13系列镜像已适配ARM64架构
- builder阶段修改为:
- 修改docker-compose.yaml中的组件镜像
- Zookeeper镜像替换为
confluentinc/cp-zookeeper:7.2.10 - Kafka镜像替换为
confluentinc/cp-kafka:7.2.10
上述Confluent 7.2.x系列镜像原生支持ARM64架构
- Zookeeper镜像替换为
- 执行构建启动命令:
docker-compose up -d --build
之前尝试失败的原因
- 仅为builder阶段指定x86架构,运行阶段的Flink、Kafka等组件还是混合架构运行,会出现网络通信、序列化不兼容问题,导致Kafka收不到消息
- 替换maven镜像时未同步匹配JDK版本,导致构建出的作业Jar包和Flink运行环境的JDK版本不一致,出现类加载异常
- 单独升级Flink小版本没有解决架构不兼容的核心问题,所以没有效果
内容的提问来源于stack exchange,提问作者Vadim
相关产品推荐
相关产品推荐

