任务节点内的本地处理:
Flink数据流管道中是否有办法确保数据流的第一步和第二步发生在同一本地任务槽/本地计算机上?
用例: 在第二步中需要在同一台机器上本地使用第一步的图像时,是否需要实时视频处理?这减轻了必须从第二个节点中的另一个节点获取巨大图像(Hadoop天的基本位置要求)。 TaskManagers可以将本地状态存储在内存中或本地磁盘上。如何让JobManager将第二步路由到同一个任务管理器?它是基于.keyBy(sameKeyId)将它推送到同一个分区吗? 我可以通过.keyBy(..)来做这样的事情来限制1个分区/分片并在第一步中存储图像的同一个任务管理器上的同一分区中的第二步操作吗?在复数课程上看到这个例子:
.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)
TIA