Apache Flink 检查点或保存点中的空数据文件是正常的还是有问题的迹象?
Are empty data files in Apache Flink checkpoints or savepoints normal or a sign of problems?
我想知道 Flink 创建的保存点(以及 HashMapStateBackend 的检查点)中的空数据文件是否是预期的事情,或者它们是否指向 Flink 本身的问题,我们的工作 运行 ning 或我们用于检查点和保存点的存储系统。
这里有一些关于我为什么要问这个问题以及在什么情况下会观察到此类空文件的背景信息:
我们在生产中 运行 遇到 Flink 设置问题。在看似随机(但目前并不少见)的情况下,flink 无法从检查点或保存点恢复。
记录的错误消息归结为如下内容:
Caused by: org.apache.flink.core.io.VersionMismatchException: Incompatible version: found 0, compatible versions are [6, 5, 4, 3, 2, 1]
at org.apache.flink.core.io.VersionedIOReadableWritable.resolveVersionRead(VersionedIOReadableWritable.java:87)
at org.apache.flink.core.io.VersionedIOReadableWritable.read(VersionedIOReadableWritable.java:47)
at org.apache.flink.runtime.state.KeyedBackendSerializationProxy.read(KeyedBackendSerializationProxy.java:139)
奇怪的是这个
发生在我们对工作代码没有任何更改的时间点
(因此与需要的数据格式无关
保存在检查点或保存点中)和
报告的“找到的版本”是 0。
更令人困惑的是,这种情况有时会发生,但并非总是如此。 IE。在 10 个保存点中,6 个是好的,4 个是坏的(不可恢复)。
我试图将其与保存点在磁盘上的样子相关联,我想我看到了以下相关性:
我们的错误保存点有一个或多个长度为零的数据文件(同一保存点中的其他数据文件长度不为零)。
我找不到太多关于保存点的二进制格式的信息。所以我的问题是:
- 保存点中的零长度数据文件是预料之中的事情还是麻烦的征兆?
- 零长度文件是否会导致上面显示的异常(即检测到版本 0)
- 我在哪里可以找到关于格式的信息(除了 Flink 源代码之外)?具体来说:有哪些版本以及它们如何记录在数据中?以及如何将
_metadata
文件转换为人类可读的形式?
我几乎可以肯定,一个空的数据文件表明这里有问题:Flink 将小于 state.storage.fs.memory-threshold
的状态写入 _metadata
。所以如果有数据文件,应该大于阈值。不过很难说问题出在哪里。您是否检查过您的存储系统:space 有足够的空间吗?
我想知道 Flink 创建的保存点(以及 HashMapStateBackend 的检查点)中的空数据文件是否是预期的事情,或者它们是否指向 Flink 本身的问题,我们的工作 运行 ning 或我们用于检查点和保存点的存储系统。
这里有一些关于我为什么要问这个问题以及在什么情况下会观察到此类空文件的背景信息:
我们在生产中 运行 遇到 Flink 设置问题。在看似随机(但目前并不少见)的情况下,flink 无法从检查点或保存点恢复。
记录的错误消息归结为如下内容:
Caused by: org.apache.flink.core.io.VersionMismatchException: Incompatible version: found 0, compatible versions are [6, 5, 4, 3, 2, 1]
at org.apache.flink.core.io.VersionedIOReadableWritable.resolveVersionRead(VersionedIOReadableWritable.java:87)
at org.apache.flink.core.io.VersionedIOReadableWritable.read(VersionedIOReadableWritable.java:47)
at org.apache.flink.runtime.state.KeyedBackendSerializationProxy.read(KeyedBackendSerializationProxy.java:139)
奇怪的是这个
发生在我们对工作代码没有任何更改的时间点 (因此与需要的数据格式无关 保存在检查点或保存点中)和
报告的“找到的版本”是 0。
更令人困惑的是,这种情况有时会发生,但并非总是如此。 IE。在 10 个保存点中,6 个是好的,4 个是坏的(不可恢复)。
我试图将其与保存点在磁盘上的样子相关联,我想我看到了以下相关性:
我们的错误保存点有一个或多个长度为零的数据文件(同一保存点中的其他数据文件长度不为零)。
我找不到太多关于保存点的二进制格式的信息。所以我的问题是:
- 保存点中的零长度数据文件是预料之中的事情还是麻烦的征兆?
- 零长度文件是否会导致上面显示的异常(即检测到版本 0)
- 我在哪里可以找到关于格式的信息(除了 Flink 源代码之外)?具体来说:有哪些版本以及它们如何记录在数据中?以及如何将
_metadata
文件转换为人类可读的形式?
我几乎可以肯定,一个空的数据文件表明这里有问题:Flink 将小于 state.storage.fs.memory-threshold
的状态写入 _metadata
。所以如果有数据文件,应该大于阈值。不过很难说问题出在哪里。您是否检查过您的存储系统:space 有足够的空间吗?