Apache flink Flink增量检查点—数据在共享文件夹中保留多长时间

Apache flink Flink增量检查点—数据在共享文件夹中保留多长时间,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我们正在使用Flink 1.6.3并将检查点保留在CEPH中,一次只保留一个检查点,使用增量和rocksdb 我们在延迟3天的情况下运行windows,这意味着我们希望在3-4天后不会保留检查点共享文件夹中的任何数据,但我们仍然可以看到来自更多数据的数据 e、 g. 如果今天是7/4,则有一些来自2/4的文件 有时,我们会看到检查点,我们认为(由于其索引号不同步),它属于一个被压碎的作业,并且该检查点不用于恢复该作业 我的问题是 为什么我们会从延迟配置中看到较旧的数据 我如何知道这些文件属于一

我们正在使用Flink 1.6.3并将检查点保留在CEPH中,一次只保留一个检查点,使用增量和rocksdb

我们在延迟3天的情况下运行windows,这意味着我们希望在3-4天后不会保留检查点共享文件夹中的任何数据,但我们仍然可以看到来自更多数据的数据
e、 g.
如果今天是7/4,则有一些来自2/4的文件

有时,我们会看到检查点,我们认为(由于其索引号不同步),它属于一个被压碎的作业,并且该检查点不用于恢复该作业

我的问题是

  • 为什么我们会从延迟配置中看到较旧的数据
  • 我如何知道这些文件属于一个有效的检查点,而不是一个破碎作业的检查点?这样我们就可以删除这些文件了

经过调查并在云唐(apache flink用户邮件列表)的协助下
我创建了以下代码
元数据路径-检查点/保存点文件夹中元数据文件的路径
这是在flink 1.6.3版上测试的

        DataInputStream in = new DataInputStream(new FileInputStream(metadataPath));
        final Savepoint savepoint = Checkpoints.loadCheckpointMetadata(in, CheckpointTool.class.getClassLoader());

        final Set<String> pathSharedFromMetadata = savepoint.getOperatorStates().stream()
                .flatMap(operatorState -> operatorState.getSubtaskStates().values().stream()
                        .flatMap(operatorSubtaskState -> operatorSubtaskState.getManagedKeyedState().stream()
                                .flatMap(keyedStateHandle -> Stream.concat(((IncrementalKeyedStateHandle) keyedStateHandle).getSharedState().values().stream(),
                                        ((IncrementalKeyedStateHandle) keyedStateHandle).getPrivateState().values().stream())
                                        .map(streamStateHandle -> {
                                            String name = null;
                                            if (streamStateHandle instanceof FileStateHandle) {
                                                name = ((FileStateHandle) streamStateHandle).getFilePath().getName();
                                            } else {
                                                final String handleName = ((ByteStreamStateHandle) streamStateHandle).getHandleName();
                                                name = new File(handleName).getName();
                                            }
                                            return name.trim();

                                        })
                                )
                        )
                )
                .collect(Collectors.toSet());
        System.out.println("pathSharedFromMetadata:" + pathSharedFromMetadata); 
DataInputStream in=newdatainputstream(newfileinputstream(metadataPath));
最终保存点Savepoint=Checkpoints.loadCheckpointMetadata(在,CheckpointTool.class.getClassLoader()中);
最终设置pathSharedFromMetadata=savepoint.getOperatorStates().stream()
.flatMap(operatorState->operatorState.getSubtaskStates().values().stream())
.flatMap(operatorSubtaskState->operatorSubtaskState.GetManagedKeydState().stream())
.flatMap(keyedStateHandle->Stream.concat(((IncrementalKeyedStateHandle)keyedStateHandle).getSharedState().values().Stream(),
((IncrementalKeyedStateHandle)keyedStateHandle).getPrivateState().values().stream())
.map(streamStateHandle->{
字符串名称=null;
if(文件状态句柄的streamStateHandle实例){
名称=((FileStateHandle)streamStateHandle.getFilePath().getName();
}否则{
最后一个字符串handleName=((ByTestStreamStateHandle)streamStateHandle).getHandleName();
name=新文件(handleName).getName();
}
返回name.trim();
})
)
)
)
.collect(收集器.toSet());
System.out.println(“pathSharedFromMetadata:+pathSharedFromMetadata”);