Flink Streaming API:如何将元素发送到多个(但不是全部)分区?



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);

最新更新