我有一份使用StreamingFileSink将记录写到远程文件系统的作业。我想建立一个零件文件包含记录的索引。有没有一种方法可以使用Flink API来实现?还是有办法知道零件文件已完成,我现在可以脱机处理该文件以进行索引了?
答案 0 :(得分:0)
在Flink文档的日常版本中,详细描述了StreamingFileSink的part file lifecycle。
简短的答案是,零件文件可以安全使用时被重命名-“安全”表示文件已关闭(不会再进行写入)并已建立检查点。此时,文件名将从part-subtaskIndex-partFileIndex.inprogress.uid
更改为part-subtaskIndex-partFileIndex
。例如,名称可能从part-1-0.inprogress.ea65a428-a1d0-4a0b-bbc5-7a436a75e575
更改为part-1-0
。
请注意,要正确运行StreamingFileSink,需要启用检查点。
回到问题的第一部分-是否可以使用公共API确定哪个部分文件包含给定记录?我相信这是由KeyGroupRangeAssignment.assignKeyToParallelOperator完成的。
有关键状态如何组织的说明,请参见A Deep Dive into Rescalable State in Apache Flink。