3、flink计算任务在运行时可以选择哪些执行模式

目录

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();
    }
}

重要提示:

猜你喜欢

转载自blog.csdn.net/weixin_42845827/article/details/131406991
今日推荐