尽管没有处理新数据,Flink Checkpoint 完成时间仍在增长

Flink Checkpoint completion time growing despite no new data being processed

我有一份工作,其中有几个不同的状态,并且检查点配置为每 5 秒发生一次。现在是 运行,50 个并行度,每个任务槽 1 cpu。对于快速测试,它仅消耗 60k 条记录,几秒钟内即可完成。但是我现在将作业 运行 保留了几个小时,因为我注意到它在运行并继续采取检查点时,检查点完成的时间从 4 秒变为 20 秒,依此类推,直到达到超时。

我周末有同样的工作 运行(这个的检查点超时是 5 分钟)。启动,基本上立即处理了所有 45k 记录,检查点在 5 秒左右完成。然后注意到每第 5 个检查点恰好一个检查点需要大约 20 秒才能完成。然后后面的4个都回到了5秒。今天再次检查,每个检查点都需要一分半钟才能完成。没有看到一致的突然时间峰值,但仍然看到一对夫妇花费 1 分 20 秒,然后两个花费 1 分 35 秒,然后回到 1:20。

这是当前的检查点配置:

我很困惑为什么检查点完成时间一直在增加。有什么想法吗?

您描述的部分情况是正常的,因为 rocksdb 有时会执行压缩,这会导致某些检查点花费的时间比其他检查点更长。

即使没有数据被摄取或处理,定时器也可能导致需要检查点的状态变化。

然而,这听起来可能令人担忧。这将有助于了解作业在做什么,以及您是否启用了增量检查点。检查点的大小如何——它们是稳定的,还是随着时间的推移而增长,还是上下波动?

你能分享一个最小的、可重现的例子吗?

所以答案是它与基础设施设置有关。

tl;dr:RocksDB 在网络上的共享卷上。

因此,要详细说明到底出了什么问题(深入解释归功于项目的基础架构团队成员)是 RocksDB 在数据中心的共享卷上。在幕后,提供商将 NFS 用于共享卷,而 NFS 并不适合具有大量事务和 IO 的工作负载,例如 RocksDB。写入 NFS 卷需要锁,并且多次 pods 写入同一个 NFS 卷可能 运行 在请求锁的 pods 之间发生争用。

因此我们不再使用 PVC,而是使用具有大小限制的 emptyDir 卷切换到每个 pod 的临时存储,这样我们就不必担心 pod 会因填满底层节点而意外导致中断.

这也解决了我在这个问题中的另一个问题,因为它基本上是同一问题的不同症状 ()。

不确定这是否应该有 more/different 标签(或者那些会是什么),因为它不完全是一个 flink 问题。