Задача Локальная обработка внутри узла:
Есть ли способ в конвейере потока данных Flink обеспечить, чтобы 1-й и 2-й этап потока данных происходили в одном и том же локальном слоте задач / локальном компьютере?
Вариант использования:
Нужна ли обработка видео в реальном времени, когда изображение с 1-го этапа нужно использовать локально на той же машине на 2-м шаге? Это уменьшает необходимость получения огромного изображения из другого узла во 2-м узле (базовое требование к местоположению из дней Hadoop).
TaskManager может хранить локальное состояние в памяти или на локальном диске. Как я могу сделать JobManager направить 2-й шаг к тому же диспетчеру задач? Это основано на .keyBy (sameKeyId), чтобы отправить его в тот же раздел?
Могу ли я сделать что-то подобное с помощью .keyBy (..), чтобы ограничить 1 раздел / шард и работать на 2-м шаге в том же разделе в том же диспетчере задач, где изображение хранилось на 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)
ТИА