Apache flink Flink-数据集-Flink能否尊重多个流/输入的处理顺序?

Apache flink Flink-数据集-Flink能否尊重多个流/输入的处理顺序?,apache-flink,flink-sql,Apache Flink,Flink Sql,在我的Flink批处理程序(数据集/表格)中,我正在读取多个文件,这将产生不同的流,进行一些处理,并将其以输出格式保存 由于flink使用的是数据流模型,而我的流实际上并没有关联,所以它是并行处理的 但我希望Flink至少尊重输出操作的顺序,因为我希望flow1在flow2之前保存 例如,我有一些类似于: Table table1 = tableEnv.fromTableSource(new MyTableSource1()); DataSet<Obj1> dataSet1 = ta

在我的Flink批处理程序(数据集/表格)中,我正在读取多个文件,这将产生不同的流,进行一些处理,并将其以输出格式保存
由于flink使用的是数据流模型,而我的流实际上并没有关联,所以它是并行处理的

但我希望Flink至少尊重输出操作的顺序,因为我希望flow1在flow2之前保存

例如,我有一些类似于:

Table table1 = tableEnv.fromTableSource(new MyTableSource1());
DataSet<Obj1> dataSet1 = talbeEnv.toDataSet(table1.select("toto",..),Obj1.class)
dataSet1.output(new WateverdatasinkSQL())

Table table2 = tableEnv.fromTableSource(new MyTableSource2());
DataSet<Obj2 dataSet2 = tableEnv.toDataSet(table2.select("foo","bar",..),Obj2.class)
dataSet2.output(new WateverdatasinkSQL())
Table table1=tableEnv.fromTableSource(新的MyTableSource1());
DataSet dataSet1=talbeEnv.toDataSet(表1.select(“toto”),Obj1.class)
dataSet1.output(新的WateverdatasinkSQL())
table2=tableEnv.fromTableSource(新的MyTableSource2());

DataSet最简单的解决方案是将两个流分离到单个作业中,然后逐个执行它们

Table table1 = tableEnv.fromTableSource(new MyTableSource1());
DataSet<Obj1> dataSet1 = talbeEnv.toDataSet(table1.select("toto",..), Obj1.class);
dataSet1.output(new WateverdatasinkSQL());
env.execute();

Table table2 = tableEnv.fromTableSource(new MyTableSource2());
DataSet<Obj2> dataSet2 = tableEnv.toDataSet(table2.select("foo","bar",..), Obj2.class);
dataSet2.output(new WateverdatasinkSQL());
env.execute();
Table table1=tableEnv.fromTableSource(新的MyTableSource1());
数据集dataSet1=talbeEnv.todata集(表1.select(“toto”),Obj1.class);
输出(新的WateverdatasinkSQL());
execute();
table2=tableEnv.fromTableSource(新的MyTableSource2());
DataSet dataSet2=tableEnv.toDataSet(table2.select(“foo”,“bar”,“…”),Obj2.class);
输出(新的WateverdatasinkSQL());
execute();

最简单的解决方案是将两个流分离成单独的作业,然后逐个执行

Table table1 = tableEnv.fromTableSource(new MyTableSource1());
DataSet<Obj1> dataSet1 = talbeEnv.toDataSet(table1.select("toto",..), Obj1.class);
dataSet1.output(new WateverdatasinkSQL());
env.execute();

Table table2 = tableEnv.fromTableSource(new MyTableSource2());
DataSet<Obj2> dataSet2 = tableEnv.toDataSet(table2.select("foo","bar",..), Obj2.class);
dataSet2.output(new WateverdatasinkSQL());
env.execute();
Table table1=tableEnv.fromTableSource(新的MyTableSource1());
数据集dataSet1=talbeEnv.todata集(表1.select(“toto”),Obj1.class);
输出(新的WateverdatasinkSQL());
execute();
table2=tableEnv.fromTableSource(新的MyTableSource2());
DataSet dataSet2=tableEnv.toDataSet(table2.select(“foo”,“bar”,“…”),Obj2.class);
输出(新的WateverdatasinkSQL());
execute();

天哪,今天你第二次救我,费边,非常感谢:)我看到迭代中有一个断点,flink正在等待一个超级步骤完成,然后再启动下一个,但这与我的用例无关,但是,我们是否可以在批处理中对流进行分组和排序,从而实现某种超级步骤呢?有一些操作天生就阻止了数据流,例如完全排序。然而,为了将其与另一个数据流同步,需要连接这些数据流,这将导致相当混乱的代码。我会一个接一个地处理这些工作。好的,谢谢,顺便说一句,这工作很有魅力:)嗨,费边,如果我的源2实际上是我的源1,你会怎么做?使用此解决方案,我的源代码将被读取两次,因为这些是独立的作业?(有两个不同的执行计划?)如何将第一个输出的结束与第二个输出的开始联系起来?类似于我需要在两个数据库中插入一行,但我需要先完成,然后再开始第二个insertHello@Fabien,这在集群上部署时不起作用,因为FLink只执行第一个jobGraph..天哪,你今天第二次救我,Fabian,非常感谢:)我看到迭代中有一个断点,在启动下一个超级步骤之前,flink正在等待超级步骤完成,但这与我的用例无关,但是我们可以有一种超级步骤来对批处理的流进行分组和排序吗?有一些操作固有地阻止了数据流,例如完全排序。然而,为了将其与另一个数据流同步,需要连接这些数据流,这将导致相当混乱的代码。我会一个接一个地处理这些工作。好的,谢谢,顺便说一句,这工作很有魅力:)嗨,费边,如果我的源2实际上是我的源1,你会怎么做?使用此解决方案,我的源代码将被读取两次,因为这些是独立的作业?(有两个不同的执行计划?)如何将第一个输出的结束与第二个输出的开始联系起来?类似于我需要一行插入两个数据库,但我需要先完成,然后再开始第二个insertHello@Fabien,这在集群上部署时不起作用,因为FLink只执行第一个jobGraph。。