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

Apache flink Flink Streaming API:如何将元素发送到多个(但不是全部)分区?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,Flink 1.5有broadcast()和partitionCustom()方法,允许将元素发送到所有分区或仅发送到一个分区 是否可以将元素发送到两个或多个分区,但不能发送到所有分区 API会支持它吗?恐怕没有对这种情况的直接支持。但是,通过为单个输入元素发出多个结果,可以使用flatMap函数非常容易地实现它 例如 stream.flatMap(新的flatMap函数(){ @凌驾 公共void flatMap(对象值,收集器输出)引发异常{ out.collect(Tuple2.of(/*

Flink 1.5有
broadcast()
partitionCustom()
方法,允许将元素发送到所有分区或仅发送到一个分区

是否可以将元素发送到两个或多个分区,但不能发送到所有分区


API会支持它吗?

恐怕没有对这种情况的直接支持。但是,通过为单个输入元素发出多个结果,可以使用
flatMap
函数非常容易地实现它

例如

stream.flatMap(新的flatMap函数(){
@凌驾
公共void flatMap(对象值,收集器输出)引发异常{
out.collect(Tuple2.of(/*key1*/,value));
out.collect(Tuple2.of(/*key2*/,value));
out.collect(Tuple2.of(/*key3*/,value));
}
}).partitionCustom(新的分区器(){
@凌驾
公共整数分区(对象键、整数分区){
return/*所需分区*/
}
}, 0);

恐怕这种情况没有直接的支持。但是,通过为单个输入元素发出多个结果,可以使用
flatMap
函数非常容易地实现它

例如

stream.flatMap(新的flatMap函数(){
@凌驾
公共void flatMap(对象值,收集器输出)引发异常{
out.collect(Tuple2.of(/*key1*/,value));
out.collect(Tuple2.of(/*key2*/,value));
out.collect(Tuple2.of(/*key3*/,value));
}
}).partitionCustom(新的分区器(){
@凌驾
公共整数分区(对象键、整数分区){
return/*所需分区*/
}
}, 0);
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);