写点什么

起底 eBay Flink 的上云之路

  • 2019-11-09
  • 本文字数:2663 字

    阅读完需:约 9 分钟

起底eBay Flink的上云之路

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


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


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

一、集群生命周期管理

Flink 集群构建于 Tess 之上,Tess 是 eBay 对 Kubernettes 的定制和增强,是 eBay 内部使用的下一代云平台。我们采用 Tess Deployment 来构建 Flink cluster 的 TaskManager™和 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 技术荟(ID:eBayTechRecruiting)


原文链接


https://mp.weixin.qq.com/s/LeBYvP2uxQHY_RjF9D3ZqQ


2019-11-09 08:001730

评论

发布
暂无评论
发现更多内容

Elasticsearch 近实时搜索 Near Real-Time Search

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

数字化“翻译官”

boshi

数字化 七日更

跳表

一个大红包

3月日更

【办公自动化】打卡示范

IT蜗壳-Tango

办公自动化 3月日更 IT蜗壳教学

微服务学习笔记

lenka

3月日更

Python 日期格式和时间以及当前时间和时间戳

HoneyMoose

[转]html5设计原理

小江

优化自动化测试流程,使用 flask 开发一个 toy jenkins工具

和牛

Python 软件测试

Lex Fridman: How to learn and master a new skill 简评

teoking

啥?用了并行流还更慢了

L

Java

「Linux」网络配置大揭秘

我是程序员小贱

3月日更

算法攻关 - 重上到下打印二叉树 (O(n))_offer32

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关 从上到下打印二叉树

css高度坍塌与清除浮动

依旧廖凯

28天写作 3月日更

进入大厂的简历应该是什么样子

我是程序员小贱

3月日更

你最喜欢的奥斯卡电影是哪部?

wbliu85

Oracle中我们什么时候需要用到定时任务?

xiezhr

oracle 定时任务 存储过程

一名MindSpore新手的爬坑记录~~

依旧廖凯

28天写作 3月日更

(28DW-S8-Day21) 《流程型组织》学习笔记:「客户第一」还是「老板第一」

mtfelix

28天写作 流程型组织

LeetCode题解:91. 解码方法,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

优雅编程 | Javascript闭包的4种高级用法

devpoint

闭包 防抖 节流 闭包要点

万事开头难——人为推进效应

Justin

心理学 28天写作 游戏设计

互联网信贷风险与大数据 存量管理

张老蔫

28天写作

什么样的技术能进入一线大厂?这份阿里、百度、腾讯等 20家Java岗招聘要求梳理报告,会给你答案;

Java架构师迁哥

Elasticsearch Document 写入原理

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

Wireshark数据包分析学习笔记Day9

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

虚拟路由器冗余协议 VRRP 详解

《经济学人》2021年3月13日刊精彩文章导读及资源免费下载

wbliu85

基于SparkMLlib智能课堂教学评价系统的设计与实现(一)

大数据技术指南

大数据 spark 智能时代 28天写作 3月日更

打卡第一次

容光

办公自动化

Python DataTime 日期处理

HoneyMoose

原来我还有网络天赋

叫练

网络 交换机

起底eBay Flink的上云之路_技术管理_徐朝晖_InfoQ精选文章