Flink K8s会话集群作业提交失败报无法分配内存且blob堆积问题咨询
根因说明
作业提交过程中BlobServer向持久化存储写入作业元数据时触发IO异常(日志中提示内存分配失败,本质是写入操作底层系统调用出错),此时作业还未完成完整的提交流程,没有进入Flink的作业调度生命周期,所以不会在Web UI展示,也不会触发正常作业结束后的HA资源清理逻辑,最终导致blob目录残留堆积。默认配置下这类提交阶段的异常不会自动触发重试。
相关配置说明
1. 开启提交失败作业自动重试
你可以调整以下配置实现提交阶段异常的作业自动重试:
kubernetes.job-submission.max-attempts:默认值为1,调整为3~5即可开启K8s环境下作业提交的失败重试,提交失败后会自动尝试重新提交作业high-availability.job-recovery.timeout:默认值为10分钟,该参数控制HA模式下失联作业的恢复超时阈值,超过该阈值还未恢复的作业会被标记为失败,触发关联资源的自动清理,可根据业务需要调整为3~5分钟加快异常作业的判定速度
2. 自动清理残留blob目录
搭配以下配置可避免残留目录持续堆积:
blob.cleanup.interval:默认值为1小时,控制BlobServer定期扫描清理过期blob资源的时间间隔,保持默认或者调整为30分钟都可jobstore.expiration-time:Flink 1.13及以上版本支持该配置,默认值为1小时,控制JobStore中异常残留的作业元数据的过期时间,过期后会自动清理关联的所有blob目录
根因优化建议
你日志中出现的Cannot allocate memory写入错误,优先排查以下两点:
- 排查Flink Session集群节点的系统内存占用,以及/recovery目录挂载存储的剩余可用空间,解决底层写入异常
- 生产环境建议使用分布式存储(如HDFS、S3兼容存储)作为HA的blob存储,避免本地存储单节点故障导致的写入失败
内容的提问来源于stack exchange,提问作者aromal
相关产品推荐
相关产品推荐

