Timo Walther created FLINK-23402: ------------------------------------ Summary: 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
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] {noformat} 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. {noformat} [~dwysakowicz] {noformat} 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. {noformat} 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)