flink中parallelism
parallelism是flink中并行度,用以提高flink任务job的执行效率,可以通过调整配置提高flink任务中并行度
调整并行度方式:
- conf配置
flink-conf.yaml
# The parallelism used for programs that did not specify and other parallelism.
parallelism.default: 1
- 任务提交时设置并行度
启动你的 Flink job,可以这样设置并行度(使用 -p 并行度)
./bin/flink run -p 10 ../word-count.jar
- 代码设置并行度
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(10);
data.keyBy(new xxxKey())
.flatMap(new XxxFlatMapFunction()).setParallelism(5)
.map(new XxxMapFunction).setParallelism(5)
.addSink(new XxxSink()).setParallelism(1)
flink中slot
任务中并行度由每个Task Manager上可用的slot决定,slot在flink中可以认为是资源组,Flink将每个任务分成子任务并且将这些子任务分配到slot中来并行执行程序。
可以在一个 slot 中运行一个或多个线程。 同一 slot 中的线程共享相同的 JVM。 同一 JVM 中的任务共享 TCP 连接和心跳消息。Task Manager 的一个 Slot 代表一个可用线程,该线程具有固定的内存,注意 Slot 只对内存隔离,没有对 CPU 隔离。默认情况下,Flink 允许子任务共享 Slot,即使它们是不同 task 的 subtask,只要它们来自相同的 job。这种共享可以有更好的资源利用率。
可以通过调整flink-conf.yaml参数进行调整
taskmanager.numberOfTaskSlots:1
参考文档
http://www.54tianzhisheng.cn/2019/01/14/Flink-parallelism-slot/