关于后端:美团-Flink-资源调度优化实践

33次阅读

共计 3870 个字符,预计需要花费 10 分钟才能阅读完成。

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

  1. 相干背景和问题
  2. 解决思路剖析
  3. 资源调度优化实际
  4. 后续布局

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

一、相干背景和问题

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

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

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

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

二、解决思路剖析

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

  • 故障节点。通常是这个节点上呈现了重大的故障,无奈持续应用。比方磁盘损坏、机器宕机。
  • 慢节点。尽管机器可用,但存在性能问题。例如网卡降速,导致作业处理能力降落;或者这个节点上有很多高负载作业。

以后,Flink 和 Yarn 都有肯定机制来解决异样资源,然而也有缺点有余。

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

因而,咱们心愿通过增强 Flink 应答异样节点的能力,来保障资源可能衰弱及时地就绪。

首先,对于重启后遭逢其余故障节点的作业。咱们通过复用 Session 集群资源的思路进行躲避。这样不仅能够躲避新的故障节点,而且能放慢作业重新部署。其次,对于作业主动重启的场景。一个简略无效的思路就是冗余申请,通过申请适量资源的形式,使作业所需的资源全副就绪,从而躲避节点故障导致的资源就绪慢或者无奈就绪的问题。这须要用户的队列有足够的资源余量。

如果没有足够资源余量的队列,咱们的思路是采纳黑名单。当零碎辨认出异样节点后,进行躲避。冀望用这个思路来解决广泛的机器故障或者机器慢的问题。

三、资源调度优化实际

3.1 资源冗余申请

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

上面介绍下冗余申请策略。首先须要要思考的问题是,如何保障冗余申请是无效的?咱们须要额定申请多少个冗余 container,能力确保能躲避故障节点?

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

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

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

最终抉择在作业部署或重启时,防御性的发动冗余资源申请,保障作业所需的资源,可能失常按时就绪。当作业部署或重启实现后,及时开释冗余申请的资源。通过这样的策略,咱们在资源就绪时效性和资源老本中,获得均衡。

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

3.2 黑名单机制

黑名单机制分为感知和解决两局部。在感知局部,须要疾速精确,它是黑名单机制无效的前提。在解决局部,须要灵便无效,从而应答各种类型的异样。

在设计黑名单时,看到社区和业界都有相干的思考和实际。因而,咱们也进行了相干调研。

社区黑名单,次要用于在批计算揣测执行中,躲避慢节点。业界的黑名单机制,次要用于在实时作业调度过程中,躲避故障节点。社区黑名单,通过比照工作执行耗时,来发现慢节点。业界黑名单,次要通过异样的次数累计,来辨认节点故障。由此可见,社区和业界利用不同策略解决不同场景的问题。

接下来,介绍下美团的黑名单。如上图所示,左侧是黑名单的感知局部。咱们收集作业运行或调度过程中的异样事件和运行指标。而后,依据一些策略辨认出慢节点和故障节点。咱们从应用层的视角感知异样,不须要明确残缺的起因,也能疾速精确的发现异常节点。

右侧是黑名单的解决局部,咱们通过保护一个外围的黑名单服务,对立承受上一步辨认出的异样节点,并把它们发送给资源管理服务或 Flink 作业来解决。咱们从资源管理的视角登程,简化解决流程,反对流批两种执行模式、反对不同的资源管理服务。

3.3 故障节点感知策略

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

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

3.4 异样节点解决机制

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

如何无效解决不同类型的异样节点。目前,咱们反对两种解决形式。即能够让 TM 立刻从异样节点上退出,也能够先运行,等下次 restart 时,再退出异样节点。在解决粒度方面,既反对解决单个作业,也能够间接解决整个节点。

Flink 和 Yarn 如何解决异样节点?在 Flink 外部,咱们新增一个组件 Unhealthy Node Manager,负责对异样节点的治理。

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

对于上层物理资源管理,通过形象外围接口,能够适配不同的资源管理服务。除此之外,通过提供对外交互的 API,能够跟内部零碎联动。

在 Yarn 侧,咱们在原有健康检查的根底上,新增了 FREEZE 状态,示意节点不再承受调度,但也不 Kill 正在运行的 container。与此同时,咱们买通了 Yarn 的健康检查机制,因为一些人力和老本的起因,咱们应用了基于 zk 的共享存储,黑名单服务公布异样节点信息,Yarn 监听并实现异样节点的解决。

3.5 躲避慢节点场景

接下来,介绍下躲避慢节点场景。咱们对局部并发慢,产生慢节点的起因进行了分类。

数据歪斜、逻辑歪斜都是业务侧的问题,引擎无法控制和应答。但资源不均是黑名单能够应答的。应答这种起因的慢节点,外围是如何感知慢节点。因为它们感知后的解决能力是雷同的。

慢节点断定策略。首先,察看某个作业是否有局部并发的吞吐,显著高于其余并发。如果有,阐明存在数据歪斜。如果没有,持续查看是否有局部并发的 processTime,比其余并发高。其中,processTime 是咱们新增的单条音讯解决耗时指标。

如果 processTime 比其余并发高,咱们须要判断是逻辑歪斜,还是存在慢节点。如果某个 TM 里存在生产慢的 task,那么这个节点的慢节点票数 +1。如果一个机器上,超过一半的 TM 都认为该节点慢。那咱们会认为生产慢的起因是,遭逢慢节点,这个节点会被发送给黑名单服务解决。

3.6 其余优化

除了基于多作业的感知解决,一些明确异样能够间接闭环在引擎外部感知解决,晋升解决时效。例如磁盘故障,是有明确特色的,不存在误判。这种能够间接在引擎外部实现感知和拉黑解决。

黑名单机制上线后,也无效解决了很多问题。首先是,应答故障节点。当节点呈现磁盘故障时,作业的 restart 次数从之前的 10 屡次升高到了 1 次。对于节点宕机的状况,咱们能够在 10s 内发现和躲避宕机的节点,作业 restart 的耗时从之前的 5 分钟升高至失常程度。

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

四、后续布局

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

  • 保持稳定性建设。咱们冀望通过动静扩容机制,来减小流量突增场景下的作业运维带来的断流时长。
  • 优化资源效率。咱们冀望通过对资源正当的缩容和调配,来晋升单作业和集群整体的资源利用效率,缩小资源节约。

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


更多内容


流动举荐

阿里云基于 Apache Flink 构建的企业级产品 - 实时计算 Flink 版现开启流动:
0 元试用 实时计算 Flink 版(5000CU* 小时,3 个月内)
理解流动详情:https://click.aliyun.com/m/1000372333/

正文完
 0