flink流api:如何将元素发送到多个(但不是所有)分区?

n8ghc7c1  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(289)

flink 1.5有 broadcast() 以及 partitionCustom() 方法,允许将元素发送到所有分区或仅发送到一个分区。
是否可以将元素发送到两个或多个分区,但不能发送到所有分区?
api会支持它吗?

xwmevbvl

xwmevbvl1#

恐怕这种情况没有直接的支持。不过,您可以通过 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);

相关问题