首页 > 解决方案 > 流文件接收器:跟踪零件文件何时完成

问题描述

我有使用 StreamingFileSink 将记录写入远程文件系统的工作。我想建立一个包含记录的部分文件的索引。有没有办法使用 Flink API 来实现这一点?或者有没有办法知道零件文件已经完成,我现在可以离线处理它以进行索引?

标签: apache-flink

解决方案


在 Flink 文档的日常构建中,详细描述了 StreamingFileSink的部分文件生命周期。

简短的回答是,零件文件在可以安全使用时被重命名——“安全”意味着文件已关闭(不会发生进一步的写入)并设置了检查点。此时文件名将从 更改part-subtaskIndex-partFileIndex.inprogress.uidpart-subtaskIndex-partFileIndex。例如,名称可能从 更改part-1-0.inprogress.ea65a428-a1d0-4a0b-bbc5-7a436a75e575part-1-0

请注意,StreamingFileSink 的正确操作需要启用检查点。

回到问题的第一部分——您能否使用公共 API 确定哪个部分文件包含给定记录?我相信这是由KeyGroupRangeAssignment.assignKeyToParallelOperator完成的。

有关如何组织键控状态的说明,请参阅A Deep Dive into Rescalable State in Apache Flink


推荐阅读