Flink Streaming API: как отправить элемент нескольким (но не всем) разделам? - PullRequest
0 голосов
/ 26 мая 2018

Flink 1.5 имеет методы broadcast() и partitionCustom(), которые позволяют отправить элемент либо на все , либо на только на один раздел.

Возможно ли этоотправить элемент двум или более разделам, но не всем?

Будет ли он поддерживаться в API?

1 Ответ

0 голосов
/ 27 мая 2018

Боюсь, что нет прямой поддержки для такого сценария.Однако вы можете легко реализовать это с помощью функции flatMap, выдав несколько результатов для одного элемента ввода.

Например,

stream.flatMap(new FlatMapFunction<Object, Tuple2<Object, Object>>() {
    @Override
    public void flatMap(Object value, Collector<Tuple2<Object, Object>> out) throws Exception {
        out.collect(Tuple2.of(/*key1*/, value));
        out.collect(Tuple2.of(/*key2*/, value));
        out.collect(Tuple2.of(/*key3*/, value));
    }
}).partitionCustom(new Partitioner<Object>() {
    @Override
    public int partition(Object key, int numPartitions) {
        return /* desired partition */
    }
}, 0);
...