apache-flink - Apache Flink 本地设置,独立 JAR 与 start-cluster.sh 之间的实际区别
问题描述
所以这两种方法的代码都是一样的,大致如下:
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
该文档页面指出:
LocalExecutionEnvironment 正在启动完整的 Flink 运行时,包括 JobManager 和 TaskManager。这些包括内存管理和在集群模式下执行的所有内部算法。
并让我认为两者之间没有实际差异,但我不能确定......
还有什么我需要考虑的吗?在性能方面会有什么不同吗?
解决方案
正如您在文档中发现的那样,这两种模式几乎没有区别。
LocalExecutionEnvironment
将创建一个迷你集群,其中包含本地运行的作业管理器、资源管理器和配置的任务管理器数量(local.number-taskmanager,默认为 1)。
如果你运行start-cluster.sh
,它会产生同样的东西。任务管理器的数量取决于您的 conf/slaves(默认情况下仅包含 localhost)。
主要区别在于LocalExecutionEnvironment
在同一个 JVM 中运行所有这些服务,因为它主要是作为您从 IDE 运行的调试工具。在集群模式下,您最终会得到两个不同的进程。在性能方面,我希望没有明显的差异,因为主要负载是在任务管理器上处理的。只有协调消息(作为远程过程调用)在同一个 JVM 进程中应该更快。
但是,请注意配置和最重要的类加载中的细微差别。由于本地模式将所有内容都放在一个进程中,因此您可能会看到比集群模式更多/其他类。因此,在投入生产之前,请确保在集群设置中对其进行测试。在本地模式下也没有 Web UI。
推荐阅读
- oim - Oracle IDAM 安装 | 系统要求
- json - 使用分页包和 JSON 的 Flutter 应用程序
- vba - 电子邮件中的链接 (DoCmd.SendObject)
- jwt - JWT RS256 - 中间人可以在令牌到达客户端之前获得令牌吗?
- compiler-errors - Jags RUNTIME ERROR:第 17 行的编译错误。尝试重新定义节点 delta[15,1,1]
- angular - 带有免费输入的Angular 6下拉列表
- python - FOR 循环问题和 IP 地址相关性
- python - 如果可以通过在列表中放置加法或减法运算来获得目标整数,则编写应返回 true 的函数
- amazon-web-services - 具有无服务器本地环境的 AWS Cognito
- c++ - 为什么 C++ 正则表达式这么慢?