调度作业失败并出现 org.apache.flink.runtime.jobmanager.scheduler.NoResourceAvailableException

Gil*_*ove 5 kubernetes apache-flink

感谢您阅读这个问题,它可能看起来很长,但我会尝试在其中获取尽可能多的信息以帮助获得答案。

概括

目前,我们的 Flink 集群遇到了调度问题。

症状是我们的部分/大部分/全部(这取决于情况,症状并不总是相同)任务显示为“已计划”,但在超时后失败。然后,作业将显示为RUNNING

失败的异常如下:

Caused by: java.util.concurrent.CompletionException: org.apache.flink.runtime.jobmanager.scheduler.NoResourceAvailableException: Slot request bulk is not fulfillable! Could not allocate the required slot within slot request timeout
Run Code Online (Sandbox Code Playgroud)

经过分析,我们假设(我们无法证明这一点,因为这部分代码没有太多日志)失败是由于同时提交多个作业时发生的死锁/竞争条件造成的。 Flink 集群,即使集群中有足够的可用槽。

实际上,我们有 52 个可用任务槽位的错误,并且有 12 个作业未安排。

附加信息

  • Flink 版本:1.13.1 提交 a7f3192
  • 会话模式下的 Flink 集群
  • 2 个使用 k8s HA 模式的作业管理器(资源请求:2 个 CPU、4Gb RAM、内存限制设置为 4Gb)
  • 50 个任务管理器,每个任务管理器 2 个插槽(资源请求:2 个 CPU、2GB RAM。无限制)。
  • 我们的Flink集群每天晚上都会关闭,每天早上都会重新启动。当需要安排大量作业时,似乎会发生该错误。这些作业被配置为恢复其状态,并且我们没有看到正在计划和正确运行的作业有任何问题,这似乎确实与计划问题有关。

问题

  • FLINK-23409中描述的问题实际上是相同的,但仅在调度多个作业时存在竞争条件时才会出现?
  • 有没有办法增加调度程序中的日志记录来调试此问题?
  • 这是一个已知问题吗?如果是,是否有任何解决方法/解决方案来解决它?

PS:不久前,我在ML上问了或多或少相同的问题,但放弃了它,如果这被认为是交叉询问,我很抱歉,这不是有意的。我们只是打开一个新线程,因为我们有更多信息并且问题再次出现。