ARM架构下Apache Druid Docker镜像构建及运行问题咨询
M1 Mac ARM64架构运行Docker版Apache Druid问题解答
你遇到的两个问题核心原因都是官方26.0.0版本以前的Druid Docker镜像仅适配amd64架构,在M1 Mac上通过Rosetta 2转译运行导致的:
- 退出码137本质是进程内存不足被OOM杀死,转译过程本身会产生额外30%以上的内存开销,且转译后的JVM进程内存占用远高于原生运行,调高Docker内存配额只是抵消了转译的额外消耗,没有解决根本问题
- 运行效率低是Rosetta转译的固有损耗,Druid作为重计算、依赖JVM即时编译的服务,转译后性能损失普遍超过40%,启动慢、操作响应延迟都是转译后的正常表现
适配ARM64架构的解决方案
直接使用官方原生ARM64镜像
Apache Druid从26.0.0版本开始,官方已正式提供ARM64架构的Docker镜像,直接拉取对应版本的镜像即可原生运行,无需转译。
自行从源码构建ARM64镜像
如果需要使用26.0.0以下的版本,可以按照以下步骤自行构建:
- 提前准备ARM64版本的JDK 11、Maven 3.6+及Docker Desktop for Mac,确保Docker默认运行架构为arm64
- 拉取对应版本的Druid源码到本地,在源码根目录执行编译命令:
mvn clean install -DskipTests -Pdist - 编译完成后进入
distribution/docker目录,执行镜像构建:docker build -t druid:<你的版本号>-arm64 . - 替换原有集群部署配置中的镜像为你本地构建的镜像标签即可
额外优化建议
- 原生ARM64镜像运行单节点模拟集群时,Docker仅需分配4GB内存即可稳定运行,无需分配8GB
- 可根据节点角色调整JVM参数,常规单节点模拟集群可在
common.runtime.properties中配置:-Xms2g -Xmx2g -XX:MaxDirectMemorySize=1g,Broker节点可适当将堆内存调整为3G - 集群的元数据、segment存储建议使用Docker Volume挂载,不要使用主机文件共享目录,避免IO损耗降低运行效率
内容的提问来源于stack exchange,提问作者Janson
相关产品推荐
相关产品推荐

