所以两种方法中的代码都是相同的,大致如下:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// prepare the topology...
env.execute();
该方案是Flink在单台计算机上本地运行 。
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。其中包括内存管理以及以群集模式执行的所有内部算法。
让我认为两者之间没有实际区别,但是我不确定...
还有什么我需要考虑的吗?在性能方面会有差异吗?
答案 0 :(得分:2)
正如您在文档中所发现的,两种模式之间几乎没有差异。
LocalExecutionEnvironment
将创建一个小型集群,该集群具有本地运行的作业管理器,资源管理器以及配置的任务管理器数量(local.number-taskmanager,默认为1)。
如果您运行start-cluster.sh
,它将产生相同的结果。任务管理器depend on your conf/slaves though的数量(默认情况下仅包含localhost)。
主要区别在于LocalExecutionEnvironment
在同一个JVM中运行所有这些服务,这主要是因为它是从IDE运行的调试工具。在集群模式下,您将面临两个不同的过程。在性能方面,我希望没有明显的区别,因为主要负载是在任务管理器上处理的。在同一JVM进程中,只有协调消息(作为远程过程调用)应该更快。
但是,请注意配置之间的细微差异,最重要的是类加载。由于本地模式将所有内容集中在一个进程中,因此与群集模式相比,您可能会看到更多/其他类。因此,在投入生产之前,请确保在群集设置中对其进行测试。在本地模式下,您也没有Web UI。