2017-06-20 122 views
0

我正在尝试使用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()都不正是我想要的。是否有其他方法可以从源头多次创建流?感谢您的帮助。

回答

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 DataStreams可以被重用? –

+0

是的。你可以根据你的喜好分流尽可能多的流。 –