美团 Flink 资源调度优化实践

简介: 美团数据平台计算引擎组工程师冯斐,在 Flink Forward Asia 2022 生产实践专场的分享。

摘要:本文整理自美团数据平台计算引擎组工程师冯斐,在 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


更多内容

img


活动推荐

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

image.png

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
存储 监控 数据挖掘
京东物流基于Flink & StarRocks的湖仓建设实践
本文整理自京东物流高级数据开发工程师梁宝彬在Flink Forward Asia 2024的分享,聚焦实时湖仓的探索与建设、应用实践、问题思考及未来展望。内容涵盖京东物流通过Flink和Paimon等技术构建实时湖仓体系的过程,解决复杂业务场景下的数据分析挑战,如多维OLAP分析、大屏监控等。同时,文章详细介绍了基于StarRocks的湖仓一体方案,优化存储成本并提升查询效率,以及存算分离的应用实践。最后,对未来数据服务的发展方向进行了展望,计划推广长周期数据存储服务和原生数据湖建设,进一步提升数据分析能力。
1313 1
京东物流基于Flink & StarRocks的湖仓建设实践
|
SQL 算法 调度
Flink批处理自适应执行计划优化
本文整理自阿里集团高级开发工程师孙夏在Flink Forward Asia 2024的分享,聚焦Flink自适应逻辑执行计划与Join算子优化。内容涵盖自适应批处理调度器、动态逻辑执行计划、自适应Broadcast Hash Join及Join倾斜优化等技术细节,并展望未来改进方向,如支持更多场景和智能优化策略。文章还介绍了Flink UI调整及性能优化措施,为批处理任务提供更高效、灵活的解决方案。
663 0
Flink批处理自适应执行计划优化
|
资源调度 Kubernetes 流计算
Flink在B站的大规模云原生实践
本文基于哔哩哔哩资深开发工程师丁国涛在Flink Forward Asia 2024云原生专场的分享,围绕Flink On K8S的实践展开。内容涵盖五个部分:背景介绍、功能及稳定性优化、性能优化、运维优化和未来展望。文章详细分析了从YARN迁移到K8S的优势与挑战,包括资源池统一、环境一致性改进及隔离性提升,并针对镜像优化、Pod异常处理、启动速度优化等问题提出解决方案。此外,还探讨了多机房容灾、负载均衡及潮汐混部等未来发展方向,为Flink云原生化提供了全面的技术参考。
666 9
Flink在B站的大规模云原生实践
|
SQL 存储 NoSQL
Flink x Paimon 在抖音集团生活服务的落地实践
本文整理自抖音集团数据工程师陆魏与流式计算工程冯向宇在Flink Forward Asia 2024的分享,聚焦抖音生活服务业务中的实时数仓技术演变及Paimon湖仓实践。文章分为三部分:背景及现状、Paimon湖仓实践与技术优化。通过引入Paimon,解决了传统实时数仓开发效率低、资源浪费、稳定性差等问题,显著提升了开发运维效率、节省资源并增强了任务稳定性。同时,文中详细探讨了Paimon在维表实践、宽表建设、标签变更检测等场景的应用,并介绍了其核心技术优化与未来规划。
1264 10
Flink x Paimon 在抖音集团生活服务的落地实践
|
资源调度 Kubernetes 调度
网易游戏 Flink 云原生实践
本文分享了网易游戏在Flink实时计算领域的资源管理与架构演进经验,从Yarn到K8s云原生,再到混合云的实践历程。文章详细解析了各阶段的技术挑战与解决方案,包括资源隔离、弹性伸缩、自动扩缩容及服务混部等关键能力的实现。通过混合云架构,网易游戏显著提升了资源利用率,降低了30%机器成本,小作业计算成本下降40%,并为未来性能优化、流批一体及智能运维奠定了基础。
735 9
网易游戏 Flink 云原生实践
|
SQL 关系型数据库 MySQL
Flink CDC 3.4 发布, 优化高频 DDL 处理,支持 Batch 模式,新增 Iceberg 支持
Apache Flink CDC 3.4.0 版本正式发布!经过4个月的开发,此版本强化了对高频表结构变更的支持,新增 batch 执行模式和 Apache Iceberg Sink 连接器,可将数据库数据全增量实时写入 Iceberg 数据湖。51位贡献者完成了259次代码提交,优化了 MySQL、MongoDB 等连接器,并修复多个缺陷。未来 3.5 版本将聚焦脏数据处理、数据限流等能力及 AI 生态对接。欢迎下载体验并提出反馈!
1959 1
Flink CDC 3.4 发布, 优化高频 DDL 处理,支持 Batch 模式,新增 Iceberg 支持
|
存储 运维 BI
万字长文带你深入广告场景Paimon+Flink全链路探索与实践
本文将结合实时、离线数据研发痛点和当下Paimon的特性,以实例呈现低门槛、低成本、分钟级延迟的流批一体化方案,点击文章阅读详细内容~
|
消息中间件 SQL 监控
Flink在美团的实践与应用
Kafka作为最大的数据中转层,支撑了美团线上的大量业务,包括离线拉取,以及部分实时处理业务等。在数据缓存层之上,是一个引擎层,这一层的左侧是我们目前提供的实时计算引擎,包括Storm和Flink。
1520 0
|
10月前
|
存储 分布式计算 数据处理
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
阿里云实时计算Flink团队,全球领先的流计算引擎缔造者,支撑双11万亿级数据处理,推动Apache Flink技术发展。现招募Flink执行引擎、存储引擎、数据通道、平台管控及产品经理人才,地点覆盖北京、杭州、上海。技术深度参与开源核心,打造企业级实时计算解决方案,助力全球企业实现毫秒洞察。
864 0
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
|
运维 数据处理 数据安全/隐私保护
阿里云实时计算Flink版测评报告
该测评报告详细介绍了阿里云实时计算Flink版在用户行为分析与标签画像中的应用实践,展示了其毫秒级的数据处理能力和高效的开发流程。报告还全面评测了该服务在稳定性、性能、开发运维及安全性方面的卓越表现,并对比自建Flink集群的优势。最后,报告评估了其成本效益,强调了其灵活扩展性和高投资回报率,适合各类实时数据处理需求。

相关产品

  • 实时计算 Flink版