Flink 1.5 具有broadcast()
和partitionCustom()
方法,允许将元素发送到所有或仅一个分区。
是否可以将元素发送到两个或多个分区,但不能发送到所有分区?
API 会支持它吗?
恐怕没有直接支持这种情况。但是,您可以通过为单个输入元素发出多个结果来使用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);