Изменить исходную функцию в Flink, не прерывая выполнение - PullRequest
0 голосов
/ 25 апреля 2018

Я ищу решение, как я могу изменить исходную функцию во Flink во время выполнения:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

SourceFunction<String> mySource = ...; // this a function that I want to change during runtime;
DataStream<String> stream = env.addSource(mySource); 

stream.map(...).print(); // creating my stream

env.execute("sample");

Я думаю о создании обертки вокруг реальной реализации SourceFunction, которая при необходимости заменит реализацию за кулисами, но сталкивается с понятием SourceContext.

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

В Flink Forward была беседа, в которой рассматривались некоторые связанные с этим вопросы.Я думаю, вы найдете это полезным.См. Состояние начальной загрузки в Apache Flink .

0 голосов
/ 27 апреля 2018

ОК, в качестве альтернативы вы можете посмотреть ответ, который я предоставил ранее для SO, с некоторым примером кода для переноса нескольких источников .Но обратите внимание на комментарий Фабиана, что это сохранит порядок, только если параллелизм нижестоящего оператора также равен 1.

0 голосов
/ 26 апреля 2018

Вы можете соединить поток из двух функций источника и запустить их в CoMapFunction.Внутри этого вы можете решить, что отбрасывать, но это предполагает, что более поздний источник не выводит данные, пока вы не будете готовы переключиться на них.

...