Flink 内容分享(十四):美团 Flink 资源调度优化实践

这篇具有很好参考价值的文章主要介绍了Flink 内容分享(十四):美团 Flink 资源调度优化实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

相关背景和问题

解决思路分析

资源调度优化实践

资源冗余申请

黑名单机制

故障节点感知策略

异常节点处理机制

规避慢节点场景

其他优化

后续规划


相关背景和问题

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

解决思路分析

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

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

资源调度优化实践

资源冗余申请

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

黑名单机制

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

故障节点感知策略

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

异常节点处理机制

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

规避慢节点场景

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

其他优化

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

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

后续规划

Flink 内容分享(十四):美团 Flink 资源调度优化实践,Flink 内容分享,大数据(Hadoop)内容分享,flink,java

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

  • 坚持稳定性建设。我们期望通过动态扩容机制,来减小流量突增场景下的作业运维带来的断流时长。

  • 优化资源效率。我们期望通过对资源合理的缩容和分配,来提升单作业和集群整体的资源利用效率,减少资源浪费。文章来源地址https://www.toymoban.com/news/detail-788267.html

到了这里,关于Flink 内容分享(十四):美团 Flink 资源调度优化实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink 内容分享(四):Fink原理、实战与性能优化(四)

    目录 Transformations Sink 分区策略 Transformations算子可以将一个或者多个算子转换成一个新的数据流,使用Transformations算子组合可以处理复杂的业务处理。 Map DataStream → DataStream 遍历数据流中的每一个元素,产生一个新的元素。 FlatMap DataStream → DataStream 遍历数据流中的每一个元

    2024年02月03日
    浏览(43)
  • Flink 内容分享(十九):理想汽车基于Flink on K8s的数据集成实践

    目录 数据集成的发展与现状 数据集成的落地实践 1. 数据集成平台架构 2. 设计模型 3. 典型场景 4. 异构数据源 5. SQL 形式的过滤条件 数据集成云原生的落地实践 1. 方案选型 2. 状态判断及日志采集 3. 监控告警 4. 共享存储 未来规划 理想汽车数据集成的发展经历了四个阶段:

    2024年02月01日
    浏览(47)
  • 数据仓库内容分享(十七):Doris实践分享:它做了哪些架构优化和场景优化?

    Apache Doris是一款开源的实时数据仓库,由百度旗下的技术团队开发。它具有高性能、高可靠性、易扩展等特点,能够满足大规模数据实时查询和分析的需求。目前,Apache Doris已经成为国内外众多企业的首选数据仓库解决方案,包括阿里巴巴、美团、京东、滴滴等知名企业。

    2024年02月21日
    浏览(55)
  • 美团外卖搜索基于Elasticsearch的优化实践

    美团外卖搜索工程团队在Elasticsearch的优化实践中,基于Location-Based Service(LBS)业务场景对Elasticsearch的查询性能进行优化。该优化基于Run-Length Encoding(RLE)设计了一款高效的倒排索引结构,使检索耗时(TP99)降低了84%。本文从问题分析、技术选型、优化方案等方面进行阐述

    2023年04月08日
    浏览(56)
  • ELasticSearch-实践-性能优化-外卖搜索-美团技术团队

    最近十年,Elasticsearch 已经成为了最受欢迎的开源检索引擎,其作为离线数仓、近线检索、B端检索的经典基建,已沉淀了大量的实践案例及优化总结。然而在高并发、高可用、大数据量的 C 端场景,目前可参考的资料并不多。因此,我们希望通过分享在外卖搜索场景下的优化

    2024年01月23日
    浏览(42)
  • 行业分享----dbaplus174期:美团基于Orchestrator的MySQL高可用实践

    记录 MySQL高可用方案-MMM、MHA、MGR、PXC https://blog.csdn.net/jycjyc/article/details/119731980 美团数据库高可用架构的演进与设想 https://tech.meituan.com/2017/06/29/database-availability-architecture.html

    2024年01月19日
    浏览(54)
  • AIGC内容分享(三十四):AIGC+信息流广告

    目录 AIGC发展概览  AIGC发展的重要里程碑事件 媒体平台AIGC功能  媒体平台AIGC功能-广点通 媒体平台AIGC功能  AIGC在广告各场景应用  AIGC在广告各场景应用—文生文 AIGC在广告各场景应用—文生图 视频生成 AIGC在广告各场景应用——AI投手  展望   问答  AIGC,即 AI文本生成

    2024年01月17日
    浏览(51)
  • kubernetes scheduler 源码解析及自定义资源调度算法实践

    小到运行着几十个工作负载的 kubernetes 集群,大到运行成千上万个工作负载 kubernetes 集群,每个工作负载到底应该在哪里运行,这需要一个聪明的大脑进行指挥,kubernetes scheduler 就是这个聪明的大脑。从结果看,他的工作很简单,只是为 pod.spec.nodeName 填充上一个 node 的名字而

    2023年04月24日
    浏览(33)
  • 【基于容器的部署、扩展和管理】3.7 资源调度和优化

    往期回顾: 第一章:【云原生概念和技术】 第二章:【容器化应用程序设计和开发】 第三章:【3.1 容器编排系统和Kubernetes集群的构建】 第三章:【3.2 基于容器的应用程序部署和升级】 第三章:【3.3 自动化扩展和负载均衡】 第三章:【3.4 灰度发布和A/B测试】 第三章:【

    2024年02月08日
    浏览(48)
  • Flink优化——资源优化(一)

    目录 资源配置优化 内存设置 (1CPU 配置 4G 内存) 并行度设置 最优并行度计算 Source 端并行度的配置 Transform 端并行度的配置 Keyby 之前的算子 Keyby 之后的算子 (KeyGroup 最小值为128) Sink 端并行度的配置 RocksDB 大状态调优 设置本地 RocksDB 多目录: Checkpoint 设置     Flink 性能

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包