Apache flink 跨Flink数据流的多个步骤在节点内进行任务本地处理

Apache flink 跨Flink数据流的多个步骤在节点内进行任务本地处理,apache-flink,flink-streaming,Apache Flink,Flink Streaming,节点内的任务本地处理: Flink数据流管道中是否有方法确保数据流的第一步和第二步发生在同一本地任务槽/本地机器上 用例: 是否需要实时视频处理,其中第一步的图像需要在第二步的同一台机器上本地使用?这减轻了从第二个节点中的另一个节点获取巨大映像的负担(Hadoop时代的基本位置要求)。 TaskManager可以将本地状态存储在内存或本地磁盘上。如何使JobManager将第二步路由到同一个任务管理器?是否基于.keyBy(sameKeyId)将其推送到同一分区? 我是否可以通过.keyBy(.

节点内的任务本地处理:

Flink数据流管道中是否有方法确保数据流的第一步和第二步发生在同一本地任务槽/本地机器上

用例: 是否需要实时视频处理,其中第一步的图像需要在第二步的同一台机器上本地使用?这减轻了从第二个节点中的另一个节点获取巨大映像的负担(Hadoop时代的基本位置要求)。 TaskManager可以将本地状态存储在内存或本地磁盘上。如何使JobManager将第二步路由到同一个任务管理器?是否基于.keyBy(sameKeyId)将其推送到同一分区? 我是否可以通过.keyBy(..)执行类似操作,以限制为1个分区/碎片,并在第1步中存储映像的同一任务管理器的同一分区中的第2步上进行操作?在pluralsight课程中看到了此示例:

.partitionCustom(new Partitioner<Double>() {
                @Override
                public int partition(Double key, int numPartitions) {
                    return key.intValue() % numPartitions;
                }
            }, 1)
            .setParallelism(1)//can i have more than 1 here ?
            .mapPartition(new MapPartitionFunction<Tuple2<Long, Double>, Tuple2<Long, Double>>() {
                @Override
                public void mapPartition(Iterable<Tuple2<Long, Double>> values, Collector<Tuple2<Long, Double>> out) throws Exception {
                    Iterator<Tuple2<Long, Double>> iter = values.iterator();
                    for (int i = 0; i < 10 && iter.hasNext(); i++) {
                        out.collect(iter.next());
                    }
                }
            })
            .setParallelism(1)
.partitionCustom(新的Partitioner()){
@凌驾
公共整数分区(双键,整数分区){
return key.intValue()%numPartitions;
}
}, 1)
.setParallelism(1)//这里可以有多个1吗?
.mapPartition(新的MapPartitionFunction(){
@凌驾
公共void映射分区(Iterable值,收集器输出)引发异常{
迭代器iter=values.Iterator();
对于(int i=0;i<10&&iter.hasNext();i++){
out.collect(iter.next());
}
}
})
.1(1)

TIA

我认为官方无法做出任何保证。原则上,只要它是作业图(可以在UI中看到)中同一顶点上的“向前”操作,那么它就可能位于同一个任务管理器上。我不知道对两个单独的keyBy操作向不同的操作员进行保证。@Joshua-thx供您回复。用.partitionCustom问题更新了我的问题。我认为您不需要在partitionCustom上设置并行性(我很惊讶它甚至允许您),我相信您也可以在这里使用普通的
映射
,而不是
映射分区
。原则上我认为这一切都是可行的