Apache Flink本地设置,独立JAR与start-cluster.sh之间的实际区别

时间:2019-11-18 20:15:31

标签: apache-flink

所以两种方法中的代码都是相同的,大致如下:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// prepare the topology...
env.execute();

该方案是Flink在单台计算机上本地运行

独立JAR

pom.xml(相关位):

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-core</artifactId>
    <version>1.9.0</version>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-java_2.12</artifactId>
    <version>1.9.0</version>
</dependency>

运行方式:

java -cp target/My-0.0.0.jar MainClass

start-cluster.sh

pom.xml(相关位):

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-core</artifactId>
    <version>1.9.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-java_2.12</artifactId>
    <version>1.9.0</version>
    <scope>provided</scope>
</dependency>

运行方式:

/path/to/flink-1.9.1/bin/flink run -c MainClass target/My-0.0.0.jar

This文档页面状态:

  

LocalExecutionEnvironment正在启动完整的Flink运行时,包括JobManager和TaskManager。其中包括内存管理以及以群集模式执行的所有内部算法。

让我认为两者之间没有实际区别,但是我不确定...

还有什么我需要考虑的吗?在性能方面会有差异吗?

1 个答案:

答案 0 :(得分:2)

正如您在文档中所发现的,两种模式之间几乎没有差异。

LocalExecutionEnvironment将创建一个小型集群,该集群具有本地运行的作业管理器,资源管理器以及配置的任务管理器数量(local.number-taskmanager,默认为1)。

如果您运行start-cluster.sh,它将产生相同的结果。任务管理器depend on your conf/slaves though的数量(默认情况下仅包含localhost)。

主要区别在于LocalExecutionEnvironment在同一个JVM中运行所有这些服务,这主要是因为它是从IDE运行的调试工具。在集群模式下,您将面临两个不同的过程。在性能方面,我希望没有明显的区别,因为主要负载是在任务管理器上处理的。在同一JVM进程中,只有协调消息(作为远程过程调用)应该更快。

但是,请注意配置之间的细微差异,最重要的是类加载。由于本地模式将所有内容集中在一个进程中,因此与群集模式相比,您可能会看到更多/其他类。因此,在投入生产之前,请确保在群集设置中对其进行测试。在本地模式下,您也没有Web UI。