干货 | 起底eBay Flink的上云之路

2023-10-09 02:38

本文主要是介绍干货 | 起底eBay Flink的上云之路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

供稿 | Rheos Team 徐朝晖

编辑 | 顾欣怡

本文2238字,预计阅读时间7分钟

更多干货请关注“eBay技术荟”公众号

  导读

Apache Flink作为低延迟、高吞吐的大数据计算引擎,在实时数据处理领域有着优越的地位。本文将从集群生命周期管理、Job生命周期管理、Job快照管理三个方面介绍eBay Rheos Team如何将Flink算力服务化、便捷化。希望能给同业人员相应的借鉴与启发。

实时数据处理是当前数据生态的热门关注环节,是业务创新的重要前提。Flink从诞生之初就定位于实时计算的框架和引擎,演化至今,已经发展成为实时数据处理领域的佼佼者。然而,Flink的使用门槛比较高,加上集群本身的维护和job状态管理并不容易,业务开发者们往往就会望而却步。事实上,我们仍有多种途径可以使Flink更加服务化、便捷化。

本文将分享我们在eBay内部如何提供Flink服务的端到端管理,以解决业务开发者的后顾之忧,让他们专注于业务领域的创新,而无需烦心平台层面的维护。

从平台提供者角度,为了让Flink服务更触手可及并稳定可靠地运行,我们需要完整的组件来支撑。而云基础设施高度动态的运行时特征,也决定了平台需要具备更加弹性的机制来保证Flink集群的容错性和云原生特性

一、集群生命周期管理

Flink集群构建于Tess之上,Tess是eBay对Kubernettes的定制和增强,是eBay内部使用的下一代云平台。我们采用Tess Deployment来构建Flink cluster的TaskManager(TM)和JobManager(JM)。Deployment的特性使得单个Pod即便因为各种原因被异常销毁或退出,也能被Controler自动带起,实现一定程度上的高可用和容错机制。JM的持续健康对集群至关重要,因为JM掌控着job的状态管理,以及统筹job的checkpoint机制。

为此,我们支持JM的Active-Standby架构,通过Zookeeper来实现主备之间的快速切换。

跟Tess交互,实现集群从构建、配置更改、伸缩扩展到销毁删除,这些过程涉及到复杂的元数据管理和事件处理。NAP Service(MilkyWay)是eBay内部广泛使用的Tess应用管理平台,通过定义CRD(Custom Resource Definition)来管理应用的状态和组件之间的依赖,并提供接口以操作相应组件,此处可类比成k8s的Operator。

Flink集群的构建和维护正是依赖于Milkyway的这种能力,通过集成Milkyway接口,实现集群层面的生命周期管理,详见图1。在这一过程中,我们设计实现了丰富的运维工作流,以支持不同业务场景下集群的演化和伸缩,这些工作流运行于eBay自研的工作流引擎NAP Workflow之上。

在Flink服务化的过程中,我们也构建了精细的权限管理和Quota管理,以实现不同租户(一个租户通常对应一个业务小组)之间资源的隔离性,同时避免资源竞争。此外,为保证服务的稳健性,我们也内建了自动重试机制和熔断机制。

图1(点击可查看大图)

二、Job生命周期管理

平台构建的Flink集群运行于会话模式(Session Mode),意味着集群的生命周期与job的生命周期是互相独立的。这带来的好处是,允许job多次启停调试而无需重建集群,节省了集群频繁重建的耗时。同时,多个job能共用一个集群,也在一些场合下提升了资源利用率。

我们集成了Flink的restful接口来实现job的生命周期管理。通常情况下,在提交job之前,用户需要上传job jar包到Flink集群里,而后基于此jar包来提交job执行。另一方面,具备复杂业务逻辑且包含了依赖的jar包,通常都比较大。当增长到几百兆的大小时,本地上传jar包的体验就非常差,因为本地到线上集群的网络传输效率普遍较低,而本地到生产环境的集群甚至是隔离的。

为此,我们在Flink内部增强了jar包管理模块,使得集群能从就近的存储系统主动下拉jar包到本地,而后基于此jar包提交任务。同时,我们还开发了一个maven插件,当用户在项目中引用插件后,就能一键实现打包和上传jar包到存储系统。为了让提交到集群后的job和平台中维护的job元数据状态同步,我们在Flink端增强了一个回调机制,每次当job状态切换时,就会生成一个事件,而后这个事件会推送到平台端以更新元数据状态。

通过这些,用户就能在平台上一站式管理job的生命周期,详见图2。

图2(点击可查看大图)

Flink任务通常是一个长期无间断运行的流数据处理逻辑,但用户有时也会有临时中断job做参数调制或debug的需求。用户发起的job管理命令,经平台验证合法后,就会进一步下发到集群执行,job状态迁移详见图3。

图3(点击可查看大图)

三、Job快照管理

Flink原生支持job的checkpoint机制,通过定期给任务内部的状态数据打快照而实现job的容错能力。为实现高可用,这些快照数据都需要落盘存储到指定的集群内共享目录。然而,在云环境下,用户很难知道哪些目录可用。为此,我们设计实现了一系列的定制和增强,使得用户透明无感地享受到job的容错能力。

首先,我们为集群内的每个Pod以local-volume的形式挂载Cephfs到指定路径。

而后,我们定制了Flink job状态数据的管理机制,使得触发出来的checkpoint数据都能落到指定目录。

此外,我们还设计了合理的Cephfs目录结构,使得多租户环境下,同一租户建的集群之间能互通数据,而不同租户之间集群的数据互相隔离。

Job的checkpoint是由Flink运行时自动触发和管理的。而savepoint则由用户按需触发的状态数据保存方式,以便job下次启动时能达到断点续传的效果。我们在平台端实现了给job定期触发savepoint的功能,以便在碰到错误或需要replay数据的场景下,让job能穿梭到过去的任何时间点继续运行,详见图4。为了避免savepoint数据膨胀,我们也引入了retention机制,以清理过期数据。

图4(点击可查看大图)

四、监控和智能运维

在云环境里,机器的维护和硬件故障是常态。因此,实时监控集群的健康状况,并配置异常告警系统就很有必要。

我们为Flink集群的各节点都内置了监控模块,以搜集节点本地的运行时特征。同时借助Prometheus收集各节点数据,汇聚成集群层面的健康指标,当探测到潜在风险时,及时通过AlertManager发出告警通知。节点和job的监控数据也同时发往eBay内部的统一监控平台,以便用户端查看指标报表和订阅异常告警。

人为处理异常告警是一项非常繁琐的运维工作,所以我们还搭建了一套智能运维系统以优化操作。当运维系统收到告警后,经过初检判断是否为假告警,而后根据先前积累的经验,采取一系列补救措施来把集群带回到健康状态。只有当运维系统无法处理或补救措施效果不明显时,系统才会将告警转发至管理员,由人工介入。

五、总结 

把Flink服务化,让用户触手可得Flink特性,前端业务人员就能更加专注于业务逻辑本身,而无需关心平台以下的细节。这不仅优化了操作,节省了大量的时间和人力成本,更有助于eBay在风险监测、行为分析、数据洞察和市场营销等复杂案例上取得更多的业务创新和技术突破。

这篇关于干货 | 起底eBay Flink的上云之路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169738

相关文章

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

Flink任务重启策略

概述 Flink支持不同的重启策略,以在故障发生时控制作业如何重启集群在启动时会伴随一个默认的重启策略,在没有定义具体重启策略时会使用该默认策略。如果在工作提交时指定了一个重启策略,该策略会覆盖集群的默认策略默认的重启策略可以通过 Flink 的配置文件 flink-conf.yaml 指定。配置参数 restart-strategy 定义了哪个策略被使用。常用的重启策略: 固定间隔 (Fixe

【超级干货】2天速成PyTorch深度学习入门教程,缓解研究生焦虑

3、cnn基础 卷积神经网络 输入层 —输入图片矩阵 输入层一般是 RGB 图像或单通道的灰度图像,图片像素值在[0,255],可以用矩阵表示图片 卷积层 —特征提取 人通过特征进行图像识别,根据左图直的笔画判断X,右图曲的笔画判断圆 卷积操作 激活层 —加强特征 池化层 —压缩数据 全连接层 —进行分类 输出层 —输出分类概率 4、基于LeNet

大数据之Flink(二)

4、部署模式 flink部署模式: 会话模式(Session Mode)单作业模式(Per-Job Mode)应用模式(Application Mode) 区别在于集群的生命周期以及资源的分配方式;以及应用的main方法到底在哪里执行。 4.1、会话模式 先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业。集群启动时资源已经确定,所有提交的作业会晶振集群中的资源。适合规模小、执

是谁还不会flink的checkpoint呀~

1、State Vs Checkpoint State:状态,是Flink中某一个Operator在某一个时刻的状态,如maxBy/sum,注意State存的是历史数据/状态,存在内存中。 Checkpoint:快照点, 是Flink中所有有状态的Operator在某一个时刻的State快照信息/存档信息 一句话概括: Checkpoint就是State的快照 目的:假设作业停止了,下次启动的

最核心的 ICT 产品与技术话题,干货云集,让你不虚此行

7 月 27 日,Cloud Insight Conference 2018 就要和大家见面了,除了新品发布与科技、创新的前沿话题之外,还将与参会者共同探讨最核心的 ICT 产品与技术话题:超融合与软件定义存储、容器与企业微服务治理、多云管理与应用云化、SDN & SD-WAN、全栈 ICT 服务助推企业构建『双核心』全模云等。 我们隆重邀请到来自政府、金融、教育、物流、制造、零售、医疗、能源等

除了实践干货,还有精美礼品可以拿

除了实践干货,还有精美礼品可以拿 干货云集,让你不虚此行 10 场分论坛深度探讨7 款重磅产品发布50 位业界大咖精益分享30 场行业实践破局认知 你将收获什么 行业:聚焦多行业应用实践、内容维度更深入 与行业领袖们一起把握数字化时代的脉搏,共同分享探讨科技力量如何推动业务快速创新升级的最佳实践,推动云计算、大数据在更大范围、更多领域创新应用,助推企业的数字化转型。 能力:核心技术

Flink读取kafka数据并以parquet格式写入HDFS

《2021年最新版大数据面试题全面开启更新》 《2021年最新版大数据面试题全面开启更新》 大数据业务场景中,经常有一种场景:外部数据发送到kafka中,flink作为中间件消费kafka数据并进行业务处理;处理完成之后的数据可能还需要写入到数据库或者文件系统中,比如写入hdfs中; 目前基于spark进行计算比较主流,需要读取hdfs上的数据,可以通过读取parquet:spark.read

Apache-Flink深度解析-State

来源:https://dwz.cn/xrMCqbk5 Flink系列精华文章合集入门篇: Flink入门Flink DataSet&DataSteam APIFlink集群部署Flink重启策略Flink分布式缓存Flink重启策略Flink中的TimeFlink中的窗口Flink的时间戳和水印Flink广播变量Flink-Kafka-connetorFlink-Table&SQLFlink

Apache-Flink深度解析-Temporal-Table-JOIN

在《JOIN LATERAL》中提到了Temporal Table JOIN,本篇就向大家详细介绍什么是Temporal Table JOIN。在ANSI-SQL 2011 中提出了Temporal 的概念,Oracle,SQLServer,DB2等大的数据库厂商也先后实现了这个标准。Temporal Table记录了历史上任何时间点所有的数据改动,Temporal Table的工作流程如下: