Apache flink 如何在flink应用程序中指定两个源,一个进程运算符和一个接收器运算符

Apache flink 如何在flink应用程序中指定两个源,一个进程运算符和一个接收器运算符,apache-flink,Apache Flink,我使用的是flink 1.3,我定义了两个流源,它们将发出相同的事件供后续操作符处理(我定义的进程操作符和接收器操作符) 但在源进程pink管道中,我只能指定一个源,我会问如何指定两个或多个源,并执行相同的进程和接收器 object FlinkApplication { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment env

我使用的是flink 1.3,我定义了两个流源,它们将发出相同的事件供后续操作符处理(我定义的进程操作符和接收器操作符)

但在源进程pink管道中,我只能指定一个源,我会问如何指定两个或多个源,并执行相同的进程和接收器

object FlinkApplication {
  def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)
    env.addSource(new MySource1()) //How to MySource2 here?
      .setParallelism(1)
      .name("source1")
      .process(new MyProcess())
      .setParallelism(4)
      .addSink(new MySink())
      .setParallelism(2)
    env.execute("FlinkApplication")
  }

}

API在如何设置处理管道方面提供了很大的灵活性。如果要对多个源应用相同的逻辑,可以执行此操作:

env.addSource(新MySource1())
.process(新的MyProcess())
.addSink(新MySink())
env.addSource(新MySource2())
.process(新的MyProcess())
.addSink(新MySink())
env.execute()
或者,如果这样做更有意义,您可以合并两个流,然后处理组合流(或这些方法的某种组合):

stream1.联合(stream2)
.过程(……)
.addSink(…)
如果您希望分叉流并对每个副本应用不同的操作,也可以采用另一种方式:

val-stream:DataStream[T]=env.addSource(new-MySource())
process(新的MyProcess1())
.addSink(新的MySink1())
process(新的MyProcess2())
.addSink(新的MySink2())
env.execute()

哇,Flink 1.3已经三岁多了

API提供了很多灵活性,让您可以设置处理管道。如果要对多个源应用相同的逻辑,可以执行此操作:

env.addSource(新MySource1())
.process(新的MyProcess())
.addSink(新MySink())
env.addSource(新MySource2())
.process(新的MyProcess())
.addSink(新MySink())
env.execute()
或者,如果这样做更有意义,您可以合并两个流,然后处理组合流(或这些方法的某种组合):

stream1.联合(stream2)
.过程(……)
.addSink(…)
如果您希望分叉流并对每个副本应用不同的操作,也可以采用另一种方式:

val-stream:DataStream[T]=env.addSource(new-MySource())
process(新的MyProcess1())
.addSink(新的MySink1())
process(新的MyProcess2())
.addSink(新的MySink2())
env.execute()

哇,Flink 1.3已经三岁多了

感谢David@David anderson给出的完美答案!是的,1.3太老了,>谢谢David@David anderson给出的完美答案!是的,1.3太旧了,>