Flink Stream, как читать файл пошагово? - PullRequest
0 голосов
/ 21 февраля 2019

Я установил свою самую первую игрушку 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 голосов
/ 21 февраля 2019

Вы не делаете ничего плохого, это задокументированное поведение режима PROCESS_CONTINUOUSLY:

Если для watchType установлено значение FileProcessingMode.PROCESS_CONTINUOUSLY, когда файлизменено, его содержимое полностью переработано.Это может нарушить семантику «точно один раз», так как добавление данных в конец файла приведет к повторной обработке всего его содержимого.

Этот режим более полезен при применении к каталогу, в который вы атомарно перемещаете файлы после того, как они полностью записаны.

...