Flink Stream,如何增量读取文件?

时间:2019-02-21 07:55:43

标签: apache-flink

我已经设置了我的第一个玩具Flink,我想做一件非常简单的事情:连续读取本地文件并打印内容。

问题是,每次更新该本地文件时,Flink都会打印所有行,我希望它仅打印新添加的行。

代码段:

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
String path = "/home/foobar/input";
TextInputFormat inputFormat = new TextInputFormat(new Path(path));
inputFormat.setCharsetName("UTF-8");
DataStreamSource<String> ds = env.readFile(inputFormat, path,
                FileProcessingMode.PROCESS_CONTINUOUSLY, 60000l, BasicTypeInfo.STRING_TYPE_INFO);
ds.print();
env.execute("jobname02");

有人知道我在做什么错吗?感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您没有做错任何事情,这是PROCESS_CONTINUOUSLY模式的documented行为:

  

如果watchType设置为FileProcessingMode.PROCESS_CONTINUOUSLY,   修改文件后,其内容将完全重新处理。这个   可能会破坏“完全一次”的语义,因为最后添加数据   文件中的所有内容都会被重新处理。

当应用于目录时,此模式更有用,一旦文件被完全写入,就可以自动将文件移动到其中。