flink 不设置水印_从0到1学习Flink—— Flink parallelism 和 Slot 介绍

5ae71e64c7edc46235e7e5768626481c.png

前言

之所以写这个是因为前段时间自己的项目出现过这样的一个问题:

1Caused by: akka.pattern.AskTimeoutException: 
2Ask timed out on [Actor[akka://flink/user/taskmanager_0#15608456]] after [10000 ms]. 
3Sender[null] sent message of type "org.apache.flink.runtime.rpc.messages.LocalRpcInvocation".
4be3378f107e58bf5cb258d9305171ce.png

跟着这问题在 Flink 的 Issue 列表里看到了一个类似的问题:https://issues.apache.org/jira/browse/FLINK-9056
,看下面的评论差不多就是 TaskManager 的 slot 数量不足的原因,导致 job 提交失败。在 Flink 1.63 中已经修复了变成抛出异常了。

d8fa8483bdc610e51ae1c89106318d5f.png

竟然知道了是因为 slot 不足的原因了,那么我们就要先了解下 slot 是什么东东呢?不过文章这里先介绍下 parallelism。

什么是 parallelism?

3e78b2c3f785988641cfbfd51bc2c176.png

如翻译这样,parallelism 是并行的意思,在 Flink 里面代表每个任务的并行度,适当的提高并行度可以大大提高 job 的执行效率,比如你的 job 消费 kafka 数据过慢,适当调大可能就消费正常了。

那么在 Flink 中怎么设置并行度呢?

如何设置 parallelism?

3367b74e5a8d82f6f331b0f2f6e9e87e.png

如上图,在 flink 配置文件中可以查看到默认并行度是 1,

1cat flink-conf.yaml | grep parallelism
2
3# The parallelism used for programs that did not specify and other parallelism.
4parallelism.default: 1

所以你如何在你的 flink job 里面不设置任何的 parallelism 的话,那么他也会有一个默认的 parallelism = 1。那也意味着你可以修改这个配置文件的默认并行度。

如果你是用命令行启动你的 Flink job,那么你也可以这样设置并行度(使用 -p 并行度):

1./bin/flink run -p 10 ../word-count.jar

你也可以通过这样来设置你整个程序的并行度:

1StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
2env.setParallelism(10);

注意:这样设置的并行度是你整个程序的并行度,那么后面如果你的每个算子不单独设置并行度覆盖的话,那么后面每个算子的并行度就都是这里设置的并行度的值了。

如何给每个算子单独设置并行度呢?

1data.keyBy(new xxxKey())
2    .flatMap(new XxxFlatMapFunction()).setParallelism(5)
3    .map(new XxxMapFunction).setParallelism(5)
4    .addSink(new XxxSink()).setParallelism(1)

如上,就是在每个算子后面单独的设置并行度,这样的话,就算你前面设置了 env.setParallelism(10) 也是会被覆盖的。

这也说明优先级是:算子设置并行度 > env 设置并行度 > 配置文件默认并行度

并行度讲到这里应该都懂了,下面 zhisheng 就继续跟你讲讲 什么是 slot?

什么是 slot?

其实什么是 slot 这个问题之前在第一篇文章 《从0到1学习Flink》—— Apache Flink 介绍 中就介绍过了,这里再讲细一点。

541df64654302ae1f76e98d551ac3e48.png

图中 Task Manager 是从 Job Manager 处接收需要部署的 Task,任务的并行性由每个 Task Manager 上可用的 slot 决定。每个任务代表分配给任务槽的一组资源,slot 在 Flink 里面可以认为是资源组,Flink 将每个任务分成子任务并且将这些子任务分配到 slot 来并行执行程序。

例如,如果 Task Manager 有四个 slot,那么它将为每个 slot 分配 25% 的内存。 可以在一个 slot 中运行一个或多个线程。 同一 slot 中的线程共享相同的 JVM。 同一 JVM 中的任务共享 TCP 连接和心跳消息。Task Manager 的一个 Slot 代表一个可用线程,该线程具有固定的内存,注意 Slot 只对内存隔离,没有对 CPU 隔离。默认情况下,Flink 允许子任务共享 Slot,即使它们是不同 task 的 subtask,只要它们来自相同的 job。这种共享可以有更好的资源利用率。

文字说的比较干,zhisheng 这里我就拿下面的图片来讲解:

460e9b37252c09735ef7904d78565cf9.png

上面图片中有两个 Task Manager,每个 Task Manager 有三个 slot,这样我们的算子最大并行度那么就可以达到 6 个,在同一个 slot 里面可以执行 1 至多个子任务。

那么再看上面的图片,source/map/keyby/window/apply 最大可以有 6 个并行度,sink 只用了 1 个并行。

每个 Flink TaskManager 在集群中提供 slot。 slot 的数量通常与每个 TaskManager 的可用 CPU 内核数成比例。一般情况下你的 slot 数是你每个 TaskManager 的 cpu 的核数。

但是 flink 配置文件中设置的 task manager 默认的 slot 是 1。

d83a1f85e13e844559ba7484d8f313eb.png

slot 和 parallelism

下面给出官方的图片来更加深刻的理解下 slot:

1、slot 是指 taskmanager 的并发执行能力

4124bc569c4b78b1bea2827d62cebc75.png

taskmanager.numberOfTaskSlots:3

每一个 taskmanager 中的分配 3 个 TaskSlot, 3 个 taskmanager 一共有 9 个 TaskSlot。

2、parallelism 是指 taskmanager 实际使用的并发能力

227b04bcd0328ba56b11ca09f750979c.png

parallelism.default:1

运行程序默认的并行度为 1,9 个 TaskSlot 只用了 1 个,有 8 个空闲。设置合适的并行度才能提高效率。

3、parallelism 是可配置、可指定的

fe5048f97a742134011f36f8b28b931a.png

上图中 example2 每个算子设置的并行度是 2, example3 每个算子设置的并行度是 9。

2ba1f6f7a0e27b5f2c173c5c5eb995f2.png

example4 除了 sink 是设置的并行度为 1,其他算子设置的并行度都是 9。

好了,既然并行度和 slot zhisheng 都带大家过了一遍了,那么再来看文章开头的问题:slot 资源不够。

问题原因

现在这个问题的答案其实就已经很明显了,就是我们设置的并行度 parallelism 超过了 Task Manager 能提供的最大 slot 数量,所以才会报这个错误。

再来拿我的代码来看吧,当时我就是只设置了整个项目的并行度:

1env.setParallelism(15);

为什么要设置 15 呢,因为我项目消费的 Kafka topic 有 15 个 parttion,就想着让一个并行去消费一个 parttion,没曾想到 Flink 资源的不够,稍微降低下 并行度为 10 后就没出现这个错误了。

总结

本文由自己项目生产环境的一个问题来讲解了自己对 Flink parallelism 和 slot 的理解,并告诉大家如何去设置这两个参数,最后也指出了问题的原因所在。

关注我

转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2019/01/14/Flink-parallelism-slot/ , 未经允许禁止转载。

微信公众号:zhisheng

另外我自己整理了些 Flink 的学习资料,目前已经全部放到微信公众号了。你可以加我的微信:zhisheng_tian,然后回复关键字:Flink 即可无条件获取到。

dd54cacb1093cac05ffbab0e16577431.png

Github 代码仓库

https://github.com/zhisheng17/flink-learning/

以后这个项目的所有代码都将放在这个仓库里,包含了自己学习 flink 的一些 demo 和博客

相关文章

1、《从0到1学习Flink》—— Apache Flink 介绍

2、《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门

3、《从0到1学习Flink》—— Flink 配置文件详解

4、《从0到1学习Flink》—— Data Source 介绍

5、《从0到1学习Flink》—— 如何自定义 Data Source ?

6、《从0到1学习Flink》—— Data Sink 介绍

7、《从0到1学习Flink》—— 如何自定义 Data Sink ?

8、《从0到1学习Flink》—— Flink Data transformation(转换)

9、《从0到1学习Flink》—— 介绍Flink中的Stream Windows

10、《从0到1学习Flink》—— Flink 中的几种 Time 详解

11、《从0到1学习Flink》—— Flink 写入数据到 ElasticSearch

12、《从0到1学习Flink》—— Flink 项目如何运行?

13、《从0到1学习Flink》—— Flink 写入数据到 Kafka

14、《从0到1学习Flink》—— Flink JobManager 高可用性配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cad设计院常用字体_趣谈 | 那些年我们看过的电气图纸(附CAD/EPLAN区别)

电气二次回路图是我们工作中必不可少的内容,形形色色的图纸我们见过很多,小编就下面额图纸和大家分享一下,仅作为个人观点,大家的意见可在留言区补充哦!先看看几张老外额图纸吧,譬如ABB、GE,但并…

centos写mysql光标移到上一行_mysql:一条SQL更新语句(update)是如何执行的

一条更新语句的执行流程又是怎样的呢?之前你可能经常听DBA同事说,MySQL可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢?我们还是从一个表的一条更新语句说起&a…

小米wifi每天晚上准时断网_小米 11再次确定,将于28日准时发布,售价更感人

今天是12月25日,在28日晚上,小米 11将准时发布。如今,关于小米 11的消息已经越来越多,小米官方也已经确定了不少配置,同时,小米 11的售价也已经有爆料出现。根据爆料消息显示,小米 11此次或为45…

opengl 深度详解_一步步学OpenGL(23) -《阴影贴图1》

教程 23阴影贴图1原文: http://ogldev.atspace.co.uk/www/tutorial23/tutorial23.htmlCSDN完整版专栏: https://blog.csdn.net/cordova/article/category/9266966背景阴影和光是紧密联系的,正如你需要光才能投射出阴影。有许多的技术可以生成…

ug后处理如何加密_UG在NX加工中如何添加后处理文件?

在使用UG加工中,往往使用的机床不一样就要特定后处理文件,那么如何在UG中添加之前制定好的后处理文件呢?下面以UG8.5为例来说明。1、首先确认UG后处理文件是否完整。完整的后处理文件包括后缀为.def、.pui和.tcl的三个文件(注&…

华为mstp多生成树配置_网络工程师(30):多实例生成树如何计算

多实例生成树MSTP包括域间的外部生成树CST和域内的内部生成树IST,我们通称为CIST。我们先讨论CST的计算。在CST中,一个MST域看作是一台"交换机",那么在进行CST计算时,这台"交换机"的桥ID是多少呢?…

url中能出现的字符_python爬虫,解决大众点评字符库反爬机制的经验

刚开始写文章还希望大家可以喜欢,对于爬虫只是个人整理出的方法,爬虫大牛请嘴下留情。“”仅限学术交流,如有冒犯请联系作者删除“”话不多说,想分析天津地区餐饮行业的大致情况,要爬出(商铺名称&#xff0…

上课点名app_【APP种草】网瘾少年的自我救赎之最强锁机软件

相信在这个魔幻的2020,大家都经历了很多个不寻常吧。作为学生党,算是圆梦了在家学习的愿望,可当这一切都变成现实的时候,也还是没逃过点名、没逃过网课,这不,连期末考也又双叕叕地来了。作为一名需要在家完…

qrcode生产带logo_比亚迪换新标?新Logo的含义你了解吗?

对于许多制造业品牌来说,由于时代发展的速度太快,科技的力量进步太快,即便是规模庞大的老牌企业,也需要不断改变自己,以此来适应社会的改变求得生存。这就意味着,无论是什么品牌,都需要定期改变…

超前进位加法器实验报告_干货 | 加法器与反相加法器原理解析

什么是加法器加法器是为了实现加法的,即是产生数的和的装置。加数和被加数为输入,和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。常用作计算机算术逻辑部件,执行逻辑操作、…

php 支付宝小程序授权登陆验签_星巴克“啡快”登陆支付宝小程序,让你“飞快”取到咖啡...

当代年轻人的生活方式是怎样的?靠地铁通勤,靠咖啡续命早上睁不开眼,咖啡来一杯中午昏昏欲睡,咖啡来一杯晚上熬夜加班,咖啡来一杯喝完这杯,还有一杯“宁可食无肉,不可早无星”是当代年轻人的座右…

python导入同一文件夹下的类_python自定义模块

模块的引入方式:1.import 模块名:导入模块中的所有内容(引入多个用逗号分隔)import random,time2.from 模块名 import 函数名1,函数名2...导入部分模块(导入部分的话直接使用)3.from 模块名 imp…

上河南星海科技_揭秘丨赣江新区网红打卡点,为你按下科技快进键!

人类对科学和未来永无止境的求知欲,是人类社会发展的根本动力之一。整合历史长河中积累的科学文明,探索和体验未来的黑科技,在赣江新区,一座国际创新科技馆在全城翘首中揭开了神秘面纱,一举跃升为赣江新区的网红打卡点…

模糊匹配查询_必须掌握的6个查询函数应用技巧,办公必备,收藏备用!

在Excel中,有一类函数被称为查找和引用函数,今天,小编给大家分享6个查询函数(Choose、Lookup、Hlookup、Vlookup、Match、Index)的应用技巧,可以收藏备用哦!一、Choose。功能:根据序…

1万并发服务器配置_小程序后端服务器搭建:云服务器配置(1)

起因最近在搞小程序,有一个留言与图片上传并展示的功能,用小程序自带云服务器也可以实现,但如果与别的端进行多端互动就需要一个服务器来做为后端,进行图片与留言的上传,并把留言内容和上传后的图片地址保存到sql数据库…

ext 如何判断是否是整数_Excel表格技巧—如何用ISNUMBER判断是否是数值

在EXCEL的单元格中,有些单元格为填写的不是数值,在某些情况下,会影响计算结果,例如,以下的表格中,红框内的单元格一个是输入了一个空格,另一个“—”符号,后面平均值的计算未将该单元…

ensp安装对电脑配置要求高吗_直线导轨有哪些安装方法?为什么直线导轨安装精度要求高?...

要点:1、为什么直线导轨安装精度要求高;2、直线导轨的安装流程;3、直线导轨不同安装方法介绍。点击链接加入群聊【solidworks机械设计学习】:正在跳转​jq.qq.comhttps://www.zhihu.com/video/1197242052088516608

mysql查看版本号_十分钟了解MySQL事务机制

读书百遍其义自现。MySQL数据库在我们平时工作学习中的使用频率是相当之高,彻底掌握MySQL的事务机制对我们平时工作会有非常大的帮助,仔细回忆一下,你是否对MySQL事务相关的知识是否完全掌握?是否感觉有的地方有些模糊&#xff1f…

mysql 字符串类型 分区_MySQL分区类型

博文大纲:1、RANGE分区2、LIST分区3、HASH分区4、key分区5、MySQL分表和分区的区别6、附加:如何实现将分区放在不同的目录下进行存储MySQL分区类型如下:RANFGE分区LIST分区HASH分区key分区上面的四种分区的条件必须是整形,如果不是…

mysql免安装如何改密码_mysql免安装版配置与修改密码的教程

第一步:配置环境变量(我的解压路径:G:\mysql\mysql-5.7.21-winx64 )MYSQL_HOME你解压的路径PATH ;%MYSQL_HOME %\bin;PATH变量是在原来的基础上多添加的,不要把其它的设置给删掉了第二步在解压的目录下添加my.ini 文件(如果已经有了这个文件&#xff0c…