Apache flink 正在读取添加到Flink中的文件

Apache flink 正在读取添加到Flink中的文件,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我们有一个遗留应用程序,它将结果作为记录写入一些本地文件。我们希望实时处理这些记录,因此我们计划使用Flink作为引擎。我知道我可以使用StreamingExecutionEnvironment\readFile读取文本文件。似乎我们需要类似于PROCESS\u的东西,但这个标志会导致在每次更改时重新处理整个文件,这不是我们想要的 当然,我可以编写自定义源代码,在其状态下保存每个文件的记录数。但我想这种检查点方法可能会有一些问题——我的理由是,如果这很容易可靠地实现,那么它应该已经在Flink中

我们有一个遗留应用程序,它将结果作为记录写入一些本地文件。我们希望实时处理这些记录,因此我们计划使用Flink作为引擎。我知道我可以使用
StreamingExecutionEnvironment\readFile
读取文本文件。似乎我们需要类似于
PROCESS\u的东西,但这个标志会导致在每次更改时重新处理整个文件,这不是我们想要的

当然,我可以编写自定义源代码,在其状态下保存每个文件的记录数。但我想这种检查点方法可能会有一些问题——我的理由是,如果这很容易可靠地实现,那么它应该已经在Flink中实现了


任何提示/建议如何实现这一点?

只要您满足于从单个文件(每个源实例)读取内容,就可以使用自定义源轻松实现这一点。您将需要使用操作符状态并实现检查点。状态处理和检查点将如下所示:

公共类CheckpointedFileSource实现SourceFunction,ListCheckpointed{
私有长事件cnt=0;
公共void运行(SourceContext SourceContext)引发异常{
final Object lock=sourceContext.getCheckpointLock();
//跳过以前发出的事件
...
同时(未取消){
从文件中读取事件;
已同步(锁定){
eventCnt++;
collectWithTimestamp(事件,时间戳);
}
}
}
@凌驾
公共列表快照状态(长检查点ID、长检查点时间戳)引发异常{
返回集合。singletonList(eventCnt);
}
@凌驾
public void restoreState(列表状态)引发异常{
(长s:州)
this.eventCnt=s;
}
}
有关完整示例,请参见Flink培训练习中使用的。您必须对其进行一些调整,因为它是为读取静态文件而设计的,而不是附加到其中的文件