为什么 Flink 在独立集群上运行比在 IDE 中运行慢?

问题描述

我已经在我的 IDE (Intellij) 和独立集群中运行了我的 Flink 程序(在 Scala 中)。在我的程序中,我打印出运行时间。我在 IDE 中运行时得到 20 秒,在独立集群中运行时得到 74 秒。我很困惑为什么在具有 10 个并行度的集群中运行需要这么多时间。我试图基本上将 Flink 性能与 Spark 进行比较。有人可以帮我理解它是怎么发生的吗?谢谢。

添加

可以在 here 找到我的程序示例。此特定代码在控制台中打印的时间如下:

  • Flink(IDE、Windows):2550 毫秒
  • Flink(独立集群,WSL2 Ubuntu):9076 毫秒

我已更改的 Flink 独立集群的配置:

  • jobmanager.memory.process.size: 2600m
  • taskmanager.memory.process.size: 5728m
  • taskmanager.numberOfTaskSlots:20
  • parallelism.default: 4
  • 其余配置使用认值。

运行 flink jar : flink run --class flinkutils.generated.Test2Agg2Spark ./target/scala-2.12/executorflink_2.12-0.1.jar

解决方法

影响性能的一个因素是,当在 IDE 中运行时,一切都在单个 JVM 中运行,并且数据在内存中传送。而在集群中,数据通过 TCP 堆栈。

但这是一个复杂的场景,许多其他因素也可能对性能产生负面影响。

FWIW,Flink SQL 在 TPC-H 基准测试中获得了良好的性能(如果配置正确)。