2017-06-20 2 views
0

Apache Flinkを使用して、2つの異なるアルゴリズムを使用してデータストリームを処理しようとしています。私の擬似コードは次のとおりです。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()も、私が欲しいものを正確にやっていません。ソースから複数回ストリームを作成する代わりに、ご協力ありがとうございました。

答えて

3

ストリームのクローニングは非常に簡単で、専用の演算子を必要としません。 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(); 
+0

おかげで、私はinputStream.mapが呼ばれた後、InputStreamインスタンスはもう使用できないことを想定しました。だから、Flinkのデータストリームは再利用できますか? –

+0

はい。あなたは好きなだけ多くのストリームをフォークできます。 –

関連する問題