Flink中的slot介绍

  1. 什么是slot?
    在flink中,把对资源的最小抽象称作slot,可以理解为是资源的最小管理单位,它是TaskManager资源的一个子集。通过slot,flink将资源进行有效的划分和管理。注意,CPU资源并不是每个slot所独享的,而是共享的。
    每个TaskManager拥有几个slot,就代表这个TaskManager能够提供的并发能力就是几,但实际的并行度也有可能小于这个数字。
    Flink中的slot介绍_第1张图片

  2. slot共享
    flink中允许一个任务的不同子任务共享同一个slot,也允许不同任务的不同子任务共享同一个slot,前提是这些子任务不属于同一种操作类型的任务。通过slot共享,能够让资源密集型子任务(Source,Map)和资源密集型子任务(KeyBy/Window/Apply)能够充分利用资源,避免闲的闲死,忙的忙死。
    Flink中的slot介绍_第2张图片3.并行度的设置
    flink给我们提供了多种方式去设置任务的并行度。
    1.全局flink-conf.yaml文件
    Flink中的slot介绍_第3张图片
    2.命令行方式

    ./bin/flink run -p 2
    

    3.web UI界面
    Flink中的slot介绍_第4张图片

    4.代码设置

    package com.wxw.wc
    
    import org.apache.flink.api.java.utils.ParameterTool
    import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}
    import org.apache.flink.streaming.api.scala._
    
    object StreamWordCount {
      def main(args: Array[String]): Unit = {
        val params = ParameterTool.fromArgs(args)
        val host = params.get("host")
        val port: Int = params.getInt("port")
        //获取流处理执行环境
        val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
        //设置全局任务的并行度
        env.setParallelism(2)
        //读取socket数据源
        val streamDS: DataStream[String] = env.socketTextStream(host,port)
        //打散聚合求count值,可以改给每个算子单独设置并行度
        val streamWordCount: DataStream[(String, Int)] = streamDS.flatMap(_.split("\\s")).map((_,1)).keyBy(0).sum(1).setParallelism(1)
        //打印输出,默认输出并行度是本机CPU核数(8核)
        streamWordCount.print().setParallelism(2)
        //执行流式处理任务
        env.execute("Streaming WordCount Job")
    
      }
    
    }
    

    上述优先级是4>3,2>1。

你可能感兴趣的:(flink,大数据)