什么是slot?
在flink中,把对资源的最小抽象称作slot,可以理解为是资源的最小管理单位,它是TaskManager资源的一个子集。通过slot,flink将资源进行有效的划分和管理。注意,CPU资源并不是每个slot所独享的,而是共享的。
每个TaskManager拥有几个slot,就代表这个TaskManager能够提供的并发能力就是几,但实际的并行度也有可能小于这个数字。
slot共享
flink中允许一个任务的不同子任务共享同一个slot,也允许不同任务的不同子任务共享同一个slot,前提是这些子任务不属于同一种操作类型的任务。通过slot共享,能够让资源密集型子任务(Source,Map)和资源密集型子任务(KeyBy/Window/Apply)能够充分利用资源,避免闲的闲死,忙的忙死。
3.并行度的设置
flink给我们提供了多种方式去设置任务的并行度。
1.全局flink-conf.yaml文件
2.命令行方式./bin/flink run -p 23.web UI界面

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。
版权声明:本文为Wu_San原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。