目录
1、什么是有界流、无界流
2、什么是批执行模式、流执行模式
3、怎样选择执行模式?
4、怎样配置执行模式?
方式1:提交计算任务时,通过参数来指定(推荐,这种方式更灵活)
方式2:在Driver程序中配置执行模式(不推荐)
5、这是一个完整的入门案例
1、什么是有界流、无界流
有界流:
数据流定义了开始位置和结束位置,对一个计算任务而言,在计算前所有的输入数据都是已知的,不会有新的数据出现
无界流:
数据流定义了开始位置,但没有定义结束位置,对一个计算任务而言,在计算前所有的输入数据都是未知的,会有新的数据出现
2、什么是批执行模式、流执行模式
Flink任务在运行时支持不同的执行模式(批执行模式、流执行模式),可以根据业务需求和作业特点来选择使用哪种模式。
BATCH-批执行模式:
这种计算数据的模式和MR、SPARK相似,适用于一个已知固定的输入,只会计算一次不会连续运行作业。
STREAMING-流执行模式:
连续增量处理数据,连续无期限的运行在无界数据上。
3、怎样选择执行模式?
BATCH-批执行模式:
只能处理有界数据流,不能处理无界流
STREAMING-流执行模式:
可以处理有界数据流和无界数据流
选择原则:
处理的数据源如果是有界流:
优先只用BATCH处理模式,这样会更高效(在join、聚合操作时底层做了优化)
处理的数据源如果是无界流:
如果只需计算某个时刻的快照结果,可是选择BATCH处理模式
如果需要实时统计计算结果,需要选择STREAMING处理模式
4、怎样配置执行模式?
方式1:提交计算任务时,通过参数来指定(推荐,这种方式更灵活)
#提交Flink计算任务,并指定执行模式(默认为流执行模式)
bin/flink run -Dexecution.runtime-mode=BATCH|STREAMING|AUTOMATIC <jarFile>
方式2:在Driver程序中配置执行模式(不推荐)
test("批执行模式&流执行模式") {
// 获取执行环境
val env = StreamExecutionEnvironment.getExecutionEnvironment
// 指定批执行模式
env.setRuntimeMode(RuntimeExecutionMode.BATCH)
// 指定流执行模式(默认模式)
env.setRuntimeMode(RuntimeExecutionMode.STREAMING)
// 指定自动模式(根据数据源的边界性来决定使用哪种模式)
env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC)
}
官网链接:执行模式
5、这是一个完整的入门案例
开发语言:Java1.8
flink版本:flink1.17
package com.baidu.datastream.env;
/*
* TODO 运行flink计算任务,flink提供了两种执行模式(批执行模式&流执行模式)
* 批执行模式:接收的数据只计算一次,计算完毕后停止计算任务
* 流执行模式:持续的计算接收数据,连续无期限的运行在无界数据上
* 思考:怎样选择执行模式呢?
* 一般根据数据源的特点来选择执行模式
* 有界流,优先选择BATCH执行模式,这样会更高效(在join、聚合操作时底层做了优化)
* 无界流,只能选择STREAMING处理模式
* 重要提示:
* 很少会在代码中指定执行模式,一般都是在提交任务时,通过参数来指定(这种方式更加灵活)
* bin/flink run -Dexecution.runtime-mode=BATCH|STREAMING|AUTOMATIC <jarFile>
*
* */
import org.apache.flink.api.common.RuntimeExecutionMode;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
public class ExecutionMode {
public static void main(String[] args) throws Exception {
// 1.获取执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 指定批执行模式
env.setRuntimeMode(RuntimeExecutionMode.BATCH);
// 指定流执行模式(默认模式)
//env.setRuntimeMode(RuntimeExecutionMode.STREAMING);
// 指定自动模式(根据数据源的边界性来决定使用哪种模式)
//env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC);
// 注意:当数据源为`无界流`时,不能使用BATCH模式
env.socketTextStream("127.0.0.1", 9999).print();
env.execute();
}
}
重要提示:文章来源:https://www.toymoban.com/news/detail-502549.html
文章来源地址https://www.toymoban.com/news/detail-502549.html
到了这里,关于【第二章】分析一下 Flink中的流执行模式和批执行模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!