Задача Локальная обработка внутри узла в несколько этапов потока данных Flink - PullRequest
0 голосов
/ 08 мая 2018

Задача Локальная обработка внутри узла:

Есть ли способ в конвейере потока данных 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)

ТИА

...