美团 Flink 资源调度优化实践

news2024/12/23 11:44:55

摘要:本文整理自美团数据平台计算引擎组工程师冯斐,在 Flink Forward Asia 2022 生产实践专场的分享。本篇内容主要分为四个部分:

  1. 相关背景和问题
  2. 解决思路分析
  3. 资源调度优化实践
  4. 后续规划

点击查看原文视频 & 演讲PPT

一、相关背景和问题

1

在计算规模方面,目前我们有 7w 多作业,部署在 1.7w 台机器上,高峰期流量达到每秒 9 亿条。在部署方式上,目前我们主要还是在 Yarn 上使用 Session 模式部署作业。

2

大量的作业和机器也带来很多资源相关的问题,我们把问题分成两类。一类是硬件问题,比如磁盘故障、机器宕机、内存故障导致的机器卡顿等等。另一类是软件问题,包括磁盘 IO 被打满、作业间相互竞争影响等等。这两类问题,都会影响作业的部署和运行。

3

对于作业部署,最典型的问题就是,资源被调度到宕机节点,导致资源不能及时就绪,作业至少需要 5 分钟才能完成启动;或者调度到慢节点,导致 TM 启动耗时很长,作业启动慢。

4

对于作业运行,如果机器有问题,可能会导致这个机器上的作业处理慢,导致个别分区有消费延迟,甚至产生反压。

二、解决思路分析

5

如何解决这些问题?先看下问题的来源,异常的节点分成两类。

  • 故障节点。通常是这个节点上出现了严重的故障,无法继续使用。比如磁盘损坏、机器宕机。

  • 慢节点。虽然机器可用,但存在性能问题。例如网卡降速,导致作业处理能力下降;或者这个节点上有很多高负载作业。

6

当前,Flink 和 Yarn 都有一定机制来处理异常资源,但是也有缺陷不足。

首先,Flink 的心跳机制只能作为一个兜底机制。它无法感知节点的健康和负载情况。然后,Yarn 有心跳和健康检查两种机制。心跳检查的问题在于,超时时间过长。它需要 5 分钟才能感知到机器失联,这期间 Yarn 会认为机器正常可用。健康检查的问题是,感知机器故障的耗时达到分钟级别,而且不能发现所有的机器故障问题。

7

因此,我们希望通过加强 Flink 应对异常节点的能力,来保障资源能够健康及时地就绪。

首先,对于重启后遭遇其他故障节点的作业。我们通过复用 Session 集群资源的思路进行规避。这样不仅可以规避新的故障节点,而且能加快作业重新部署。其次,对于作业自动重启的场景。一个简单有效的思路就是冗余申请,通过申请过量资源的方式,使作业所需的资源全部就绪,从而规避节点故障导致的资源就绪慢或者无法就绪的问题。这需要用户的队列有足够的资源余量。

如果没有足够资源余量的队列,我们的思路是采用黑名单。当系统识别出异常节点后,进行规避。期望用这个思路来解决普遍的机器故障或者机器慢的问题。

三、资源调度优化实践

3.1 资源冗余申请

8

冗余申请和黑名单机制。首先介绍下资源冗余申请。我们在 Scheduler 中新增了一个 RedundantSlotAllocator 组件,负责发起冗余资源的申请。当作业完成调度后,我们会释放冗余的资源,这里主要复用了现有的清理空闲资源的能力。

9

下面介绍下冗余申请策略。首先需要要考虑的问题是,如何保障冗余申请是有效的?我们需要额外申请多少个冗余 container,才能确保能规避故障节点?

我们抽象了机器故障后的调度过程,得出如上图所示的模型。这个公式的含义是:加上冗余申请后,实际会就绪的 TM 数量,要大于等于作业部署所需的 TM 数量。化简后,可以得出,一个作业应该冗余的 TM 数量,要大于或等于作业的总 TM 数量除以队列机器数乘以机器数减一。

这个公式虽然简单,但也有一些前提。首先,队列中同一时间只有 1 个机器故障。其次,调度策略要保障调度均匀。

10

在冗余策略里,第二个问题就是,能否尽可能的节省资源?因为资源常驻式的冗余,虽然能最带来最快的资源就绪时效,但资源放着不用,是比较浪费的。

最终选择在作业部署或重启时,防御性的发起冗余资源申请,保障作业所需的资源,能够正常按时就绪。当作业部署或重启完成后,及时释放冗余申请的资源。通过这样的策略,我们在资源就绪时效性和资源成本中,取得平衡。

11

当冗余申请上线后,效果非常明显。SLA 作业的 tp99 的资源申请耗时从 30s 降到了 15s,tp9999 的耗时从 300s 降到了 20s。由此可见,资源就绪耗时被控制在正常范围内。

3.2 黑名单机制

12

黑名单机制分为感知和处理两部分。在感知部分,需要快速准确,它是黑名单机制有效的前提。在处理部分,需要灵活有效,从而应对各种类型的异常。

13

在设计黑名单时,看到社区和业界都有相关的思考和实践。因此,我们也进行了相关调研。

社区黑名单,主要用于在批计算推测执行中,规避慢节点。业界的黑名单机制,主要用于在实时作业调度过程中,规避故障节点。社区黑名单,通过对比任务执行耗时,来发现慢节点。业界黑名单,主要通过异常的次数累计,来识别节点故障。由此可见,社区和业界利用不同策略解决不同场景的问题。

14

接下来,介绍下美团的黑名单。如上图所示,左侧是黑名单的感知部分。我们收集作业运行或调度过程中的异常事件和运行指标。然后,根据一些策略识别出慢节点和故障节点。我们从应用层的视角感知异常,不需要明确完整的原因,也能快速准确的发现异常节点。

右侧是黑名单的处理部分,我们通过维护一个外围的黑名单服务,统一接受上一步识别出的异常节点,并把它们发送给资源管理服务或 Flink 作业来处理。我们从资源管理的视角出发,简化处理流程,支持流批两种执行模式、支持不同的资源管理服务。

3.3 故障节点感知策略

15

在前篇提到,我们需要快速准确的发现故障节点,那我们是怎么做到的呢?通常如果机器有问题,这个机器上的作业都可能受影响。如果多个作业的异常,来自同一个节点,那我们有理由相信这个节点有问题。

基于上述思路,我们通过 track-service 收集所有作业的异常信息。然后,用一个 Flink 作业判断,是否在同一时间的某个节点上,多个作业都有异常。如果有这样的节点,我们就把它发送给黑名单服务来处理。相比单个作业积累多次异常,这种方式能更快更准的发现故障节点。

3.4 异常节点处理机制

16

上图所示,这里罗列了一些我们主要关注的异常。在启动时,我们关注 JM 和 TM 的启动是否成功、是否及时。在运行过程中,我们关注 TM-JM 间的心跳超时异常、TM 被 Kill 的异常、Task 运行异常。通过聚合这些异常信息,我们就能找出哪些节点有异常。

17

如何有效处理不同类型的异常节点。目前,我们支持两种处理方式。即可以让 TM 立即从异常节点上退出,也可以先运行,等下次 restart 时,再退出异常节点。在处理粒度方面,既支持处理单个作业,也可以直接处理整个节点。

18

Flink 和 Yarn 如何处理异常节点?在 Flink 内部,我们新增一个组件 Unhealthy Node Manager,负责对异常节点的管理。

这个组件定义在 Flink 的资源管理层,与上层任务调度的逻辑解耦。这样可以支持流和批两种执行模式,而且不依赖作业的调度状态。

对于下层物理资源管理,通过抽象核心接口,可以适配不同的资源管理服务。除此之外,通过提供对外交互的 API,可以跟外部系统联动。

19

在 Yarn 侧,我们在原有健康检查的基础上,新增了 FREEZE 状态,表示节点不再接受调度,但也不 Kill 正在运行的 container。与此同时,我们打通了 Yarn 的健康检查机制,因为一些人力和成本的原因,我们使用了基于 zk 的共享存储,黑名单服务发布异常节点信息,Yarn 监听并完成异常节点的处理。

3.5 规避慢节点场景

20

接下来,介绍下规避慢节点场景。我们对部分并发慢,产生慢节点的原因进行了分类。

数据倾斜、逻辑倾斜都是业务侧的问题,引擎无法控制和应对。但资源不均是黑名单可以应对的。应对这种原因的慢节点,核心是如何感知慢节点。因为它们感知后的处理能力是相同的。

21

慢节点判定策略。首先,观察某个作业是否有部分并发的吞吐,明显高于其他并发。如果有,说明存在数据倾斜。如果没有,继续查看是否有部分并发的 processTime,比其他并发高。其中,processTime 是我们新增的单条消息处理耗时指标。

如果 processTime 比其他并发高,我们需要判断是逻辑倾斜,还是存在慢节点。如果某个 TM 里存在消费慢的 task,那么这个节点的慢节点票数+1。如果一个机器上,超过一半的 TM 都认为该节点慢。那我们会认为消费慢的原因是,遭遇慢节点,这个节点会被发送给黑名单服务处理。

3.6 其他优化

22

除了基于多作业的感知处理,一些明确异常可以直接闭环在引擎内部感知处理,提升处理时效。例如磁盘故障,是有明确特征的,不存在误判。这种可以直接在引擎内部完成感知和拉黑处理。

23

黑名单机制上线后,也有效解决了很多问题。首先是,应对故障节点。当节点出现磁盘故障时,作业的 restart 次数从之前的 10 多次降低到了 1 次。对于节点宕机的情况,我们可以在 10s 内发现和规避宕机的节点,作业 restart 的耗时从之前的 5 分钟降低至正常水平。

在慢节点场景里,对于运行在慢节点上的 TM,黑名单使其在健康节点重新启动后,作业消费吞吐可恢复正常。

四、后续规划

24

在资源和调度方向,后续的建设重点有两方面。

  • 坚持稳定性建设。我们期望通过动态扩容机制,来减小流量突增场景下的作业运维带来的断流时长。
  • 优化资源效率。我们期望通过对资源合理的缩容和分配,来提升单作业和集群整体的资源利用效率,减少资源浪费。

点击查看原文视频 & 演讲PPT

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

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

相关文章

OpenSSL 远程代码执行漏洞 CVE-2022-1292 升级方案及步骤

升级方案 升级步骤 1.查看版本号 命令:openssl version 2.下载安全版本openssl: openssl官网 下载 openssl-1.1.1o.tar.gz 3.编译安装 在/usr/lib/下创建目录openssl 输入命令: mkdir openssl 将下载的包openssl-1.1.1o.tar.gz放到这个目录,并解压 输入命令: tar -xv…

SAP 之IMG/SPRO解释

一、IMG是什么 二、使用步骤 1.举例 总结 一、IMG是什么 IMG-IMplementation Guide,是实施指引的简称,事务代码是 SPRO-SAP Project Reference Object。IMG是SAP中用于定制系统以满足业务要求的工具, 二、使用步骤 1.举例 例如&#xff0c…

保姆级教程之SABO-VMD-SVM的西储大学轴承诊断

之前写过一篇优化核极限学习机的轴承诊断,今天再出一期基于SVM的轴承诊断。 依旧是包含了从数据处理,到减法优化器SABO算法优化VMD参数,再到支持向量机的故障诊断,实现故障诊断的全流程,其他类型的故障诊断均可参考此流…

GrapeCity Documents V6.0 Update 2发布,新增支持SpreadJS的.sjs文件格式

近日,GrapeCity Documents 正式迎来其V6.2 的发布更新,能够支持 SpreadJS 中 .sjs 类型的文件。这一重大更新将为用户带来更多地惊喜。 .sjs文件有两个关键优势:空间更小且导入导出速度更快。通过采用 .sjs格式,GcExcel实现了更高…

云计算环境中高性能计算的挑战与对策

文章目录 云计算中的高性能计算挑战1. 资源竞争:2. 网络延迟:3. 数据传输效率:4. 虚拟化开销:5. 节点异构性: 高性能计算在云计算环境中的对策1. 定制化虚拟机镜像:2. 弹性资源调整:3. 高效数据…

【Sql】把数据库字段用函数根据逗号分裂成列表,然后判断列表中是否包含目标值

【Sql】把数据库字段用函数根据逗号分裂成列表,然后判断列表中是否包含目标值 【1】问题描述【2】Oracle内置函数解决【3】mysql的内置函数INSTR()【4】mysql的内置函数FIND_IN_SET() 【1】问题描述 数据库中【库信息db】和【集群信息cluster】是一对多的关系&…

学弟学妹们!要开学了,这些好物一定要提前备

开学的脚步近了,近了,神兽归笼,万物更新,大家迎接开学季的阵仗堪比迎接春天了。灵魂发问:开学装备备齐了吗?神兽们的情绪调整好了吗?自己要不要再回回炉,充充电?这次整理…

javacv 基础04-读取mp4,avi等视频文件并截图保存图片到本地

javacv 读取mp4,avi等视频文件并截图保存图片到本地 代码如下: package com.example.javacvstudy;import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.Java2DFrameConverter;import javax.imageio.Im…

《算法竞赛·快冲300题》每日一题:“浇水”

《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 浇…

得帆信息东区总经理周俊君:该采用低代码和无代码给繁重的SAP减减负了

数字化转型对任何有竞争力的业务都至关重要,组织踏上数字化转型之旅,意味着要么重新开始,要么在现有IT建设的基础上再接再厉。这段旅程不仅仅是采用新技术,而是寻求在高可用性的同时为客户提供差异化价值。为了帮助客户达成这些目…

报表技术POI和EasyPOI处理百万数据、CSV、Word

1、了解百万数据的导入 1.1 需求分析 使用POI基于事件模式解析案例提供的Excel文件 1.2 思路分析 用户模式: 加载并读取Excel时,是通过一次性的将所有数据加载到内存中再去解析每个单元格内容。当Excel数据量较大时,由于不同的运行环境可…

欧盟GMP附录-对气流流型的11条要求及解读

欧盟GMP附录《无菌药品生产》已经生效,本文总结了该附录对气流流型的11条要求,并进行延伸解读。 【气流流型检测仪】 具体11条如下,来自EU GMP 无菌附录。 1.洁净室和区域内的气流模式应可视化,以证明气流不会从低洁净级别区域进…

【数据结构】带头双向循环链表及其实现

目录 1.带头双向循环链表 2.带头双向循环链表实现 2.1初始化 2.2销毁 2.3头插 2.4链表打印 2.5头删数据 2.6尾插数据 2.7尾删数据 2.8链表判空 2.9查找一个数据 2.10在pos位置前插入数据 2.11删除pos位置 2.12求链表的长度 2.顺序表和链表的比较 1.带头双向循环…

字节前端实习的两道算法题,看看强度如何

最长严格递增子序列 题目描述 给你一个整数数组nums,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7…

使用DataX对MySQL 8.1进行数据迁移

1. 环境准备 1.1 下载DataX 这里采用直接下载的方式:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz,不过这个包是真的有点大。 1.2 安装Python Python下载地址:https://www.python.org/downloads/ 安装的时…

【深度思考】如何优雅的实现脱敏?

最近做了个脱敏的需求,要对系统中的敏感信息,如手机号、车牌号、身份证号、银行卡号等进行脱敏显示。 效果类似下面这样: 简单来说,就是对敏感信息中的某几位进行掩码显示,常见的一般是使用*。 本篇文章就来讲解下在…

解析肖特基二极管NRVBS360BNT3G整流器的优缺点及应用

何为肖特基二极管整流器? 是一种常用的电子器件,用于将交流信号转换为直流信号。它由一个PN结和一个金属接触组成,具有较低的正向压降和快速的开关特性。 在正向偏置下,肖特基二极管具有较低的正向压降,通常为0.3-0.…

如何防范恶意邮件?只要做到这几点

目前,网络钓鱼仍然是企业面临的最大威胁之一,而恶意电子邮件只是网络攻击的起点。一旦进入,威胁行动者就可以展开下一阶段的攻击,例如勒索软件或数据窃取。而这将给被攻击的企业造成巨大的声誉和经济损失,甚至涉及法律…

node升级带来的问题及解决方案(digital envelope routines::unsupported)

由于项目需要将 node版本从16升级到了18,但是原有的老项目还是使用的16的环境,导致在运行老版本的时候出现错误 错误信息如下 Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:71:19)at Object.…