技术标签: flink java Flink系统性学习专栏 大数据
如果看到任务的背压警告(如 High 级别),这意味着 生成数据的速度比下游算子消费的的速度快。以一个简单的 Source -> Sink 作业为例。如果能看到 Source 有警告,这意味着 Sink 消耗数据的速度比 Source 生成速度慢。Sink 正在向 Source 施加反压。
许多情况都会导致背压。例如,GC导致传入数据堆积,或者数据源在发送数据的速度上达到峰值。如果没有正确处理反压力,可能会导致资源耗尽,甚至在最坏的情况下,数据丢失。
看一个简单的例子。假设数据流 pipeline(抽象为 Source,Streaming job 和 Sink)在稳定状态下以每秒500万个元素的速度处理数据,如下所示正常情况(一个黑色条代表100万个元素,下图表示系统1秒内的快照):
如果 Source 发送数据的速度在某个时刻达到了峰值,每秒生成的数据达到了双倍,下游的处理能力不变:
消息处理速度 < 消息的发送速度,消息拥堵,系统运行不畅。如何处理这种情况?
a. 可以去掉这些元素,但是,对于许多流应用程序来说,数据丢失是不可接受的。
b. 将拥堵的消息缓存起来,并告知消息发送者减缓消息发送的速度。消息缓存应该是持久的,因为在发生故障的情况下,需要重放这些数据以防止数据丢失。
采样线程
背压监测通过反复获取正在运行的任务的堆栈跟踪的样本来工作,JobManager 对作业重复调用 Thread.getStackTrace()
。
如果采样(samples)显示任务线程卡在某个内部方法调用中,则表示该任务存在背压。
默认情况下,JobManager 每50ms为每个任务触发100个堆栈跟踪,来确定背压。在Web界面中看到的比率表示在内部方法调用中有多少堆栈跟踪被阻塞,例如,0.01表示该方法中只有1个被卡住。状态和比率的对照如下:
OK:0 <= Ratio <= 0.10
LOW:0.10 <Ratio <= 0.5
HIGH:0.5 <Ratio <= 1
为了不使堆栈跟踪样本对 TaskManager 负载过高,每60秒会刷新采样数据。
配置
可以使用以下配置 JobManager 的采样数:
web.backpressure.refresh-interval
,统计数据被废弃重新刷新的时间(默认值:60000,1分钟)。
web.backpressure.num-samples
,用于确定背压的堆栈跟踪样本数(默认值:100)。
web.backpressure.delay-between-samples
,堆栈跟踪样本之间的延迟以确定背压(默认值:50,50ms)。
在 Flink WebUI 的作业界面中可以看到 Back Pressure 选项页面。
采样中
表示 JobManager 对正在运行的任务触发堆栈跟踪采样。默认配置,大约会花费五秒钟。
背压状态
运行正常状态
背压状态
Spark Streaming 的 back pressure 是从1.5版本以后引入。在之前版本,只能通过限制最大消费速度。这种限速的弊端很明显,假如下游处理能力超过了这个最大的限制,会导致资源浪费。而且需要对每个 Spark Streaming 作业进行压测预估,成本比较高。
从1.5版本开始引入了 back pressure,实现自动调节数据的传输速率,其监听所有作业的 onBatchCompleted
事件,并且基于 processingDelay
、schedulingDelay
、当前批处理的记录条数以及处理完成事件来估算出一个速率,用于更新流每秒能够处理的最大记录的条数。会随着数据能力进行调整,来保证 Spark Streaming 流畅运行。
对比来看,Spark Streaming 的 back pressure 比较简单,主要是根据下游任务的执行情况等,来控制 Spark Streaming 上游的速率。Flink 的 back pressure 机制不同,通过一定时间内 stack traces 采样,监控阻塞的比率来确定背压的。
有时候服务端返回的数据是Url编码后的json数据,用Postman测试接口看返回值很不方便,用Postman的Tests脚本功能可以比较方便的观察返回值首先在Postman的Tests对话框输入以下脚本pm.test('urlDecode',function() { var urlDecode = decodeURIComponent(responseBody); var...
来源:AI科技评论本文约10388字,建议阅读20分钟。本文是一篇来自 OpenAI 研究团队的实验性论文,从数据、可视化、归因分析等方面全面分析了 CNN 神经元中的曲线检测机制。随着深度学习研究步入深水区,人们逐渐从简单地应用 CNN 转向对其内在视觉机理与可解释性的探究。本文是一篇来自 OpenAI 研究团队的实验性论文,从数据、可视化、归因分析等方面全面分析了 CNN 神经元中的曲线检测机制,是一篇利用神经科学原理研究深度学习技术的精彩范例。图 1:上图中径向辐射..
1.工作类代码import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.beans.PropertyDescriptor;import java.io.IOException;import java.io.InputStream;import jav
2019独角兽企业重金招聘Python工程师标准>>> ...
介绍网络安全已成为大家最关心的问题. 如果你利用服务器存储客户资料, 那你应该考虑使用 SSL 加密客户跟服务器之间的通讯. 随着这几年手机应用迅速崛起. 黑客也开始向手机应用转移, 原因有下列3点:手机系统各式各样, 缺乏统一的标准.许多程序员缺乏手机应用开发经验.更严重的是, 通过手机应用, 黑客可以得到手机用户的隐私数据, 如:日程安排, 联系人信息, 网页浏
渐变在使用自定义的XML,<gradient> </gradient> 也可以实现,下边要记录的是使用android提供的API完成的一 、阴影阴影在开发中一般使用与文字和图形,在绘图中又一个叫layer的层的概念,默认情况下,一般绘制都在叫main layer层上,当然,也可以绘制在新建的layer层上,实际上阴影就是在main layer层下面添加一个阴影层(shader layer) 层,可以
visio中的图形有时候需要合并并填充颜色,该怎么合并图形呢?下面我们就来看看详细的教程。软件名称:Microsoft Visio 2013 官方正式版(64位)软件大小:809MB更新时间:2018-11-111、打开visio软件以后,选择你想要的图形类型,然后在窗口左侧的图形中选中要组合的图形并拖动到画布中,比如这里我们就拖动两个椭圆形。2、两个图形拖动到画布上后,将两个图形重叠交叉在一起,...
云环境 docker 私有仓库操作docker私有仓库地址:118.190.66.172:5000使用步骤,在本机的该文件centos:/etc/sysconfig/dockerubuntu: /etc/default/docker1 在该文件下加上如下配置 DOCKER_OPTS="--insecure-registry 118.190.66.172:5000"2 重启本机docker服务 service docker restart3 确认修改是否生效 ps -ef
varButton2:Tbutton;beginButton2 := button1;这段代码没有建立一个新对象,而是建立了对内存中同一个对象的引用。内存中只有1个对象,而Button1,Button2变量都引用它。如果将对象作为参数传递给函数也是一样,没有建立新对象,而是在代码的两个不同位置引用了同一个对象。我们可以查询组件的类(sender.classtype),然后使用类引用建立该...
本内容包括无人机平台和传感器等分析。按照作物形态、生理生化、作物胁迫和产量计算等4大专题,划分为株数和株高、冠层覆盖度、作物倒伏、不同生育期状况、叶面积指数、作物系数、叶绿素含量、营养元素含量、异常因素胁迫、病虫害、作物衰老、净同化率、蛋白质含量、生物量等主要环节。
boost::hana::drop_front_exactly用法的测试程序实现功能C++实现代码实现功能boost::hana::drop_front_exactly用法的测试程序C++实现代码#include <boost/hana/assert.hpp>#include <boost/hana/drop_front_exactly.hpp>#include <boost/hana/equal.hpp>#include <boost/hana/ex
nvarchar 和varchar区别 有时候设计字段的时候,碰到nvarchar和varchar时候,是有点犹豫。所以今天就来探个究竟把。(一) varchar是非Unicode可变长度类型,nvarchar是Unicode编码可变长度类型DECLARE @name AS VARCHAR(50)='我是中国人test'SELECT @name AS Name,DA...