Apache flink ApacheFlink:setParallelism()和setMaxParallelism()的区别是什么

Apache flink ApacheFlink:setParallelism()和setMaxParallelism()的区别是什么,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我尝试使用ExecutionConfig.setMaxParallelism()方法设置Flink作业的最大并行度,但似乎不起作用 我还修改了标准WordCount示例以运行一些测试,而且setMaxParallelism()方法似乎对本地环境或独立集群都没有任何影响 setMaxParallelism()如何工作?Flink提供了两种设置: setParallelism(x)将作业或操作员的并行度设置为x,即操作员的并行任务数 setMaxParallelism(y)控制键控状态可分配到的最

我尝试使用
ExecutionConfig.setMaxParallelism()
方法设置Flink作业的最大并行度,但似乎不起作用

我还修改了标准WordCount示例以运行一些测试,而且
setMaxParallelism()
方法似乎对本地环境或独立集群都没有任何影响


setMaxParallelism()
如何工作?

Flink提供了两种设置:

  • setParallelism(x)
    将作业或操作员的并行度设置为
    x
    ,即操作员的并行任务数
  • setMaxParallelism(y)
    控制键控状态可分配到的最大任务数,即运算符的最大有效并行度。操作员仍可以有更多任务,但其中只有
    y
    将分配键控状态并可用于处理。分发密钥状态的单元称为密钥组

本文将更详细地解释这些概念

我今天又运行了一些测试,使用流而不是数据集。这次我看到了setMaxParallelism()的效果

publicstaticvoidmain(字符串[]args)引发异常
{
StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();

env.getConfig().setMaxParallelism(4);//您希望从
setMaxParallelism()
中得到什么行为?您可能会将其与
setParallelsim()
混淆吗?如果没有setMaxParallelism行,我在执行过程中看到parallelism=8,这就是env的配置方式。使用setMaxParallelism行(4),我希望在执行过程中看到parallelism=4。这是正确的吗?我还在一个具有16个内核的本地环境上进行了测试,日志文件显示了1/16任务等,有或没有setMaxParallelism行。我正在尝试为其他一些作业设置最大平行度的上限,这是正确的理解吗?另一方面,setParallelism是tested按预期工作,但这不是我们要做的。感谢Fabian的解释。因此,在后台,“最大并行度”限制了所涉及的最大键组数。是不是因为我运行的第一个测试没有使用KeyedStream(使用数据集),因此setMaxParallelism没有任何效果?
setMaxParallelism()
不影响任务的数量。它只是限制关键组的数量。因为任务比关键组多没有意义,Flink抛出了你在答案中发布的异常。@FabianHueske顺便问一下
setParallelism()之间的区别是什么
应用于
StreamExecutionEnvironment
并单独应用于
StreamOperator
s?假设我已经应用了
env.setParallelism(10)
,但对源和操作符使用了
setParallelism(1)
    public static void main(String[] args) throws Exception
    {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        env.getConfig().setMaxParallelism(4); // <-- effect

        DataStream<String> text = env.fromElements(WORDS);

        DataStream<Tuple2<String, Integer>> counts = text.flatMap(new Tokenizer()).keyBy(0).sum(1);

        counts.writeAsCsv("test.dat");

        env.execute("WordCount Example");
    }
Caused by: org.apache.flink.runtime.JobException: Vertex Flat Map's parallelism (8) is higher than the max parallelism (4). Please lower the parallelism or increase the max parallelism.
        at org.apache.flink.runtime.executiongraph.ExecutionJobVertex.<init>(ExecutionJobVertex.java:188)
        at org.apache.flink.runtime.executiongraph.ExecutionGraph.attachJobGraph(ExecutionGraph.java:830)
        at org.apache.flink.runtime.executiongraph.ExecutionGraphBuilder.buildGraph(ExecutionGraphBuilder.java:232)
        at org.apache.flink.runtime.executiongraph.ExecutionGraphBuilder.buildGraph(ExecutionGraphBuilder.java:100)
        at org.apache.flink.runtime.jobmaster.JobMaster.createExecutionGraph(JobMaster.java:1152)
        at org.apache.flink.runtime.jobmaster.JobMaster.createAndRestoreExecutionGraph(JobMaster.java:1132)
        at org.apache.flink.runtime.jobmaster.JobMaster.<init>(JobMaster.java:294)
        at org.apache.flink.runtime.jobmaster.JobManagerRunner.<init>(JobManagerRunner.java:157)
        ... 10 more