Class ForwardForUnspecifiedPartitioner<T>

Type Parameters:
T - Type of the elements in the Stream
All Implemented Interfaces:
Serializable, ChannelSelector<SerializationDelegate<StreamRecord<T>>>

@Internal public class ForwardForUnspecifiedPartitioner<T> extends ForwardPartitioner<T>
When the parallelism of both upstream and downstream is ExecutionConfig.PARALLELISM_DEFAULT and the edge's partitioner is not specified (partitioner==null), the edge's partitioner will be set to FORWARD by default(See StreamGraph.createActualEdge(java.lang.Integer, java.lang.Integer, int, org.apache.flink.streaming.runtime.partitioner.StreamPartitioner<?>, org.apache.flink.util.OutputTag, org.apache.flink.streaming.api.transformations.StreamExchangeMode, org.apache.flink.runtime.jobgraph.IntermediateDataSetID) method for details). When using the AdaptiveBatchScheduler, this will result in the parallelism of many job vertices is not calculated based on the amount of data but has to align with the parallelism of their upstream vertices due to forward edges, which is contrary to the original intention of the AdaptiveBatchScheduler.

To solve it, we introduce the ForwardForUnspecifiedPartitioner. This partitioner will be set for unspecified edges(partitioner==null), and then the runtime framework will change it to FORWARD/RESCALE after the operator chain creation:

1. Convert to ForwardPartitioner if the partitioner is intra-chain.

2. Convert to RescalePartitioner if the partitioner is inter-chain.

This partitioner should only be used when using AdaptiveBatchScheduler.

See Also: