Многократный поток процесса Apache Flink

Я пытаюсь использовать Apache Flink для обработки потока данных с использованием двух разных алгоритмов. Мой псевдокод выглядит следующим образом:

env = getEnvironment();
DataStream<Event> inputStream = getInputStream();
// How to replicate the input stream?
Array[DataStream<Event>] inputStreams = inputStream.clone()

// apply different operations on the replicated streams
outputOne = inputStreams[0].map(func1);
outputTwo = inputStreams[1].map(func2);
 ...
outputOne.addSink(sink1);
outputTwo.addSink(sink2);
env.execute();

Я провел небольшое исследование с документацией Flink. Вроде нет концепции клонирования потока. Ни DataStream.iterate () или DataStream .split () делают именно то, что я хочу. Есть ли альтернатива многократному созданию потока из его источника? Спасибо за помощь.


person Wei Ma    schedule 20.06.2017    source источник
comment
Этот ответ может вам помочь: stackoverflow.com/questions/47750597/   -  person JunZhang    schedule 26.03.2019


Ответы (1)


«Клонирование» потока довольно просто и не требует специального оператора. Вы можете просто применить несколько преобразований к одному и тому же DataStream. Все последующие преобразования будут потреблять полный поток.

Итак, в вашем примере вы делаете:

env = getEnvironment();
DataStream<Event> inputStream = getInputStream();

outputOne = inputStream.map(func1); // apply 1st transformation
outputTwo = inputStream.map(func2); // apply 2nd transformation
...
outputOne.addSink(sink1);
outputTwo.addSink(sink2);
env.execute();
person Fabian Hueske    schedule 20.06.2017
comment
Спасибо, я предположил, что после вызова inputStream.map экземпляр inputStream больше не используется. Итак, Flink DataStreams можно использовать повторно? - person Wei Ma; 20.06.2017