[ https://issues.apache.org/jira/browse/FLINK-23402?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17383277#comment-17383277 ]
Timo Walther commented on FLINK-23402: -------------------------------------- Thanks for the feedback so far. An update regarding the API: actually the decision was already made in FLIP-134: {quote} We also want to make the shuffle mode configurable because there might be cases where a user wants BATCH execution mode but still wants the data to be exchanged in a pipelined fashion. For this we propose a new configuration option execution.shuffle-mode. We will not expose a dedicated setter in StreamExecutionEnvironment, or ExecutionConfig {quote} Also, we cannot do {{RuntimeExecutionMode.BATCH.withAllExchangesBlocking()}} because {{RuntimeExecutionMode}} is an enum and {{withAllExchangesBlocking}} would then also show up the streaming mode. We can only check this during runtime. So we have two options: either we go with extended enum values such as {{RuntimeExecutionMode.BATCH, RuntimeExecutionMode.BATCH_ALL_PIPELINED}} or as the FLIP states with config options. I would go with the config option for now. This also makes it easier for the Table API that exposes {{EnvironmentSettings.inBatchMode()}} and can then simply rely on the config option for advanced settings. > Expose a consistent GlobalDataExchangeMode > ------------------------------------------ > > Key: FLINK-23402 > URL: https://issues.apache.org/jira/browse/FLINK-23402 > Project: Flink > Issue Type: Sub-task > Components: API / DataStream > Reporter: Timo Walther > Priority: Major > > The Table API makes the {{GlobalDataExchangeMode}} configurable via > {{table.exec.shuffle-mode}}. > In Table API batch mode the StreamGraph is configured with > {{ALL_EDGES_BLOCKING}} and in DataStream API batch mode > {{FORWARD_EDGES_PIPELINED}}. > I would vote for unifying the exchange mode of both APIs so that complex SQL > pipelines behave identical in {{StreamTableEnvironment}} and > {{TableEnvironment}}. Also the feedback a got so far would make > {{ALL_EDGES_BLOCKING}} a safer option to run pipelines successfully with > limited resources. > [~lzljs3620320] > {quote} > The previous history was like this: > - The default value is pipeline, and we find that many times due to > insufficient resources, the deployment will hang. And the typical use of > batch jobs is small resources running large parallelisms, because in batch > jobs, the granularity of failover is related to the amount of data processed > by a single task. The smaller the amount of data, the faster the fault > tolerance. So most of the scenarios are run with small resources and large > parallelisms, little by little slowly running. > - Later, we switched the default value to blocking. We found that the better > blocking shuffle implementation would not slow down the running speed much. > We tested tpc-ds and it took almost the same time. > {quote} > [~dwysakowicz] > {quote} > I don't see a problem with changing the default value for DataStream batch > mode if you think ALL_EDGES_BLOCKING is the better default option. > {quote} > In any case, we should make this configurable for DataStream API users and > make the specific Table API option obsolete. > It would include the following steps: > - Move {{GlobalDataExchangeMode}} from {{o.a.f.streaming.api.graph}} to > {{o.a.f.api.common}} (with reworked JavaDocs) as {{ExchangeMode}} (to have it > shorter) next to {{RuntimeMode}} > - Add {{StreamExecutionEnvironment.setExchangeMode()}} next to > {{setRuntimeMode}} > - Add option {{execution.exchange-mode}} > - Add checks for invalid combinations to StreamGraphGenerator > - Deprecate ExecutionMode ([avoid > confusion|https://stackoverflow.com/questions/68335472/what-is-difference-in-runtimeexecutionmode-and-executionmode]) -- This message was sent by Atlassian Jira (v8.3.4#803005)