kylin如何支持flink_日均万亿条数据如何处理?爱奇艺实时计算平台这样做

1.爱奇艺 Flink 服务现状

爱奇艺从 2012 年开始开展大数据业务,一开始只有二十几个节点,主要是 MapReduce、Hive 等离线计算任务。到 2014 年左右上线了 Storm、Spark 实时计算服务,并随后发布了基于 Spark 的实时计算平台 Europa。2017 年开始引入 Flink,用来替代部分 Spark Streaming 场景,满足更低延迟的实时计算需求。在这之后,相继推出流式 SQL 引擎、实时分析平台、实时数据生产平台等一系列工具,用来提升实时计算开发效率。

5bfddea466f9858295c944e293e00a24.png

目前公司内 Flink 类型节点机器 15000 多台,主要有两种部署模式:

  1. 混部模式:Flink、Spark、MapReduce 等服务混合部署,15000 多台规模
  2. 独立模式:Flink 服务独立部署,用于重要业务,约 700 多台规模

Flink 作业规模达到 800 个,每日数据生产量维持在万亿级别,日均 2500 TB。

下图所示为爱奇艺实时计算服务体系:

53540eb4825b0069cde4cbf88c448fe9.png

2.Flink 改进

2.1 监控和报警

Flink 原有的监控比较简单,无法满足业务细粒度的监控报警需求。当计算过程出现问题时,无法清晰了解计算作业内部情况,不利于进一步分析。因此,我们改进了 Flink 监控报警机制,增加了很多细粒度的监控指标,主要包括三种:

  • Job 级别监控指标:监控 Job 状态、Checkpoint 状态及耗时,当 Job 异常时自动通过实时计算平台重启。
  • Operator 级别监控指标:监控 Flink 任务的时延、反压、Source/Sink 流量,并对每个 Operator 进行指标聚合,以便用户查看。
  • TaskManager 级别监控指标:监控 CPU 使用率、内存使用率、JVM GC 等常规指标。

2.2 状态管理

由于 checkpoint 是 Flink job 内部状态,当 job 重启时,上一个 job 的状态就丢失掉,导致部分数据丢失,影响到业务。

针对上述问题,我们对 Flink 作业状态管理进行了改进。用户提交 Flink job 时,会在实时计算管理平台上配置 checkpoint 路径。通过实时计算管理平台重启 Flink job 时,先找到上一次成功的 checkpoint,从中恢复 job 丢失的状态(flink run -s :checkpointPath/chk-n/_metadata)。

e08f4873adf142d535a8b333693215b6.png
a2f4be7c90c881511919dfc5b19d32bc.png

改进后解决了状态丢失的问题,但带来新的缺陷。对于状态数据很大的作业,使用 RocksDBStateBackend 做增量 checkpoint,重启后,上一个 job 的 checkpoint 被依赖而无法删除。随着 Flink 作业长时间运行且发生多次 job 重启,系统中堆积大量无用的 checkpoint。

针对该问题,我们使用 savepoint 方式打断增量 checkpoint 的依赖链:

  1. 主动重启:通过计算平台主动重启 Flink job 前,系统会先对 job 进行 savepoint 操作再关闭 job,然后从该 savepoint 启动(flink run -s :savepointPath)。
  2. 异常重启:当平台监测到 Flink job 异常时,会自动从上次 checkpoint 开始启动该 job。一旦 job 进入到 RUNNING 状态,会先做一次 savepoint,解除对上一个 checkpoint 的依赖。
37812631da25774ff3a4078ec8c89cea.png

2.3 StreamingSQL

为了便于用户开发流任务,爱奇艺自研了支持 Spark、Flink 的流式 SQL 引擎 StreamingSQL。用户只需要通过编写 SQL 即可完成流计算 ETL 任务的开发。同时,我们也提供 IDE 编辑器和大量常用的预定义函数。

StreamingSQL 定义了 4 种类型数据表:

  • 流表:定义计算逻辑的输入,目前支持Kafka
  • 维度表:静态表,用于与流表join,比如字典映射
  • 临时表:定义中间结果,简化子查询逻辑
  • 结果表:定义计算逻辑的输出

数据从流表流入,通过一系列 SQL 语句描述的计算,计算结果写入结果表。对于计算逻辑比较复杂的计算,可能需要定义多层嵌套的子查询对计算逻辑进行描述,此时可以通过定义临时表,将计算逻辑进行拆分,降低子查询嵌套的深度。

下图展示了 StreamingSQL 例子:

279fe1b2a48356de4bab396ebd0a8ce4.png

3.实时计算平台

爱奇艺从 2015 年开始陆续推出实时计算管理、实时数据生产、实时数据分析等多个平台,满足作业开发、数据生产、数据分析等不同场景下的开发需求,提升用户的使用体验和开发效率。

3.1 实时计算管理平台

实时计算管理平台用于 Spark、Flink 任务的开发与管理。用户可以在 Web IDE 上配置相关参数进行任务的开发、上传、启动、停止等常规操作。计算管理平台提供了大量管理模块以提高用户的操作体验,主要包括以下几项:

  1. 文件管理:通过平台的文件管理功能用户可以方便的管理任务的 Jar 包及依赖库。
  2. 函数管理:为用户提供了丰富的系统函数,并支持用户注册 UDF。
  3. 版本管理:用户可以实现任务、文件的版本对比及旧版本的回滚。
  4. 系统同时提供了监控大盘、报警订阅、资源审计、异常诊断等多种功能辅助用户实时掌握作业情况。
395426d0ca774b6947e84cd52123cc42.png

3.2 实时数据处理平台

爱奇艺的数据处理平台经历了 3 个阶段的迭代升级,从原先的离线数据采集系统一步步演变成支撑千万 QPS 的实时数据生产平台。

■ Venus 1.0 – 数据采集系统

2015 年开始,我们推出了第一代数据采集平台 Venus 1.0。数据来源于两个方面,从客户端端收集到的用户观看视频的行为数据及后台服务的日志数据。用户数据从 PC、App 等客户端采集投递给平台后端的 Nginx 接收器,并落盘到本地文件中,再由 Venus agent 解析文件进行数据采集。服务日志数据是由机器上的 Venus agent 解析 log 文件采集。Venus 采集的数据直接上传到 HDFS 进行后续的离线 ETL 处理,生成离线报表供数据分析使用。

Venus 1.0 版本主要基于 Apache Flume 框架进行开发,并通过 tail+grep、awk、sed 等脚本进行数据过滤。在数据量较小时,该平台很好的解决了数据处理的需求。

9ef4fb5bc758b8e3c723b8968ab0305e.png

■ Venus 2.0 – 实时数据处理平台

在 2017 年,随着数据量的增长及实时业务需求的出现,Venus 1.0 渐渐变得力不从心。众多业务需求导致 agent 上存在大量过滤规则,过多占用机器资源甚至影响到机器上服务的稳定性。同时,每次变更都需要重启所有 agents,大大提高上线成本及风险。

因此,我们设计实现了实时数据处理平台 Venus 2.0 版本,将实时过滤功能从 Venus agent 迁移到 Flink 中并采用两级 Kafka 结构。改进后的数据平台无需重启即可动态增减数据处理规则,数据处理能力也提升了 10 倍以上,大大优化了平台的实时效果。

3a622f77452c9694ef781f092e404a04.png

■ Venus 3.0 – 实时数据生产平台

随着实时业务的大量增加,Venus 2.0 也带来了 Kafka 数据冗余、不方便分享等问题,我们在 2019 年进行了第三次改造,从数据处理升级到数据生产,推出了实时数据生产平台 Venus 3.0 版本。

用户可以在新平台上配置实时数据处理规则,并可自由组合 Filter、Split、Window 等常见算子,生产出来的流数据可以存储到流式数仓里。流式数仓是我们参考离线数仓概念打造的基于 Kafka 的数据仓库,用于以数据仓库的形式统一管理流数据。

借助实时数据生产平台及流式数仓,用户可以更加便捷地加工实时流数据,并通过业务线间的数据分享来减少流数据的重复生产。

6a53e195fe748e7b80438ff0fde8f8ae.png

3.3 实时数据分析平台

RAP(Realtime Analysis Platform)是爱奇艺基于 Apache Druid + Spark / Flink 构建的分钟级延时的实时分析平台,支持通过 web 向导配置完成超大规模实时数据的多维度分析,为用户提供一体化的 OLAP 分析操作流程,只需要几步简单的配置,即可自动建立 OLAP 模型、生成分钟级延时的可视化报表,并提供实时报警功能。

RAP 实时分析平台解决了用户在数据分析中遇到的几个困难:

1.OLAP 选型困难:爱奇艺目前提供了 Kylin、Impala、Kudu、Druid、ElasticSearch 等不同的数据存储/查询引擎,用户需要了解不同 OLAP 引擎的优缺点,花费大量精力学习,依然可能选错。RAP 帮用户屏蔽了这层,无需考虑中间数据、结果数据存到哪里、怎么查询。2. 开发成本高:用户需要写 Spark 或 Flink 代码进行实时流数据处理,并进行报表前端开发,流程冗长而复杂。在 RAP 实时分析平台上,用户无需编写Spark/Flink 程序或 SQL,只需要通过 web 配置处理规则、分析规则、报表模板、报警规则即可,大幅降低开发门槛,提升了开发效率,从以往的几天开发一张报表缩短到半小时。3. 数据实时性差:从数据产生到数据可被查询,中间存在较高时延(从数十分钟到天级别不等),且查询较慢。借助于 Flink 的实时处理能力,RAP 实现了端到端分钟级低延时的实时报表功能,且支持大规模数据亚秒级查询。

  1. 维护耗费时间:数据源发生改变时,修改的范围会覆盖整个流程,从数据处理到报表配置全部需要变更,很难操作和维护。RAP 提供了自动更新功能,帮助用户免去人工维护的麻烦。

RAP 实时分析平台架构图:

9b7e20496a56570d4ea83f683042ce71.png

4.Flink 业务案例

4.1 信息流推荐实时化

爱奇艺很早就开始了基于网格式的长视频推荐业务,近几年随着短视频的兴起,信息流形式的推荐发展迅速。信息流场景里,需要在几秒内根据用户的观看行为实时推荐相关性更高的视频,对数据的时效性要求更高。

原本基于 Spark Streaming 的实时数据处理架构无法满足这类低延迟的需求,因此,我们协助业务迁移到 Flink 平台上,消除了批量数据处理带来的延迟。单个任务的延迟从 1 分钟缩短到 1-2 秒,端到端的性能提升了 86 倍,显著提升了推荐效果。

8ebdd3d77f231999074ad1e0ed8f8913.png

4.2 使用 Flink 生产深度学习训练数据

深度学习大量应用于爱奇艺内部的各项业务,帮助业务更好的挖掘数据的价值。在深度学习场景中,训练数据的时效性非常关键。我们使用 Flink 帮助业务更加实时地生产训练数据。

下图所示为爱奇艺广告点击率预测训练的架构,业务原先通过 Hive/Spark 离线 ETL 方式生成训练数据,每 6 小时才能更新一次算法模型,导致用户特征关联不及时、不精确,影响到广告投放效果。

我们基于 Flink 进行了实时化改造,将最近 24 小时的用户数据实时写到 Kafka 中,通过 Flink 与存储在 HBase 中的过去 7 天的用户特征进行实时 join,实时产出包含最新用户特征的训练数据,将算法模型更新周期缩短到 1 小时以内,从而支持更加实时、精确的 CTR (Click-Through-Rate)预估,大幅提升广告投放效果。

f4e04a0442bd5e56a23ecf9e80b4c25c.png

4.3 端到端 Exactly-Once 处理

当 Kafka 节点出现故障重启或进行人工运维时,Flink 作业会重复消费数据导致数据失准,影响后续的数据处理,比如模型训练。针对该问题,我们设计实现了基于 Kafka Exactly Once Semantics 及 Flink two-phase commit 特性的端到端 Exactly-Once 处理方案。经过我们测试,该方案会带来 20% 的计算性能损耗,但数据重复率会从原先的最高 300% 降低到 0,很好地解决了节点重启带来的数据精确度问题。

关于 Exactly-once two-phase commit 的原理,可以阅读 Apache Flink Blog 上的详细介绍:

https://flink.apache.org/features/2018/03/01/end-to-end-exactly-once-apache-flink.html

5.挑战与规划

随着 Flink 在爱奇艺得到越来越广泛的应用,我们在资源管理、稳定性、实时开发等层面面临新的挑战。

接下来,我们会推进流批一体化,进一步完善和推广 StreamingSQL 技术,降低开发门槛。同时,积极尝试基于 Flink 的机器学习、Flink on Kubernetes、Flink 动态资源调整等前沿方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

茫茫内存,我该如何用 windbg 找到你 ?

一:背景 1. 讲故事前天wx上有个朋友丢给我一个dump,让我帮忙鉴定一下某些敏感信息在内存中是否也是加密的,现在数据安全很重要,不仅数据库中的信息要加密,灌到内存后数据同样也需密文存储,随用随解密&#…

一日一技:在Ocelot网关中实现IdentityServer4密码模式(password)

概述IdentityServer4 是为ASP.NET Core 2.系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证框架。将identityserver部署在你的应用中,具备如下的特点可以为你的应用(如网站、本地应用、移动端、服务)做集中式的登录逻辑和工作流控制…

uibot在子程序执行js失败_使用 Node.js 将珍藏的 bash 脚本封装成命令行工具

阐述如何将一个常用的 bash 脚本融入 npm 生态之中,此处以最近遇到的一个 CR 提交脚本为例。背景作为程序猿,大家或多或少地都用过 GitHub 上的 merge request 功能。当然,除了这类 Code Review 方式,不少公司都有自己的 Code Rev…

如何提高Debug效率

大家好,我是Z哥。可以不夸张地说,程序员可能有一半的时间都在修bug。虽说,根据28原则大部分bug都可以在搜索引擎上搜到(业务性bug除外),但是往往剩下的那20%bug会花费我们80%的时间。虽然解决这个问题最好的…

baidumap vue 判断范围_懂一点前端—Vue快速入门

01. 什么是 VueVue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架,是当下很火的一个 JavaScript MVVM 库,是以 数据驱动和组件化 的思想构建的。MVVM 模式简述下图不仅概括了 MVVM 模式 (Model-View-ViewModel)&#xff0c…

如何在 C#9 中使用顶级程序 (top-level)

当我们用 C# 进行编码的时候,总需要写很多的模板代码,即使是最简单的 console 程序,想象一下,如果去测试一个 类库 或者 API 的功能,通常你会用 Console 程序去实现,在开始工作的时候会发现你受到了 C# 标准模板的限制…

跨部门不配合工作_跨部门协作,队友总是“甩锅”,这三个方法教你快速避坑!...

在日常的工作中,你觉得跨部门沟通的时间占用了多少时间?前阵子我经常会看到有人抱怨,说跨部门沟通的工作实在太难了,同事总是推脱扯皮,领导交代下来的事情,要么说不是自己的职责,要么说以前没做…

模型存储在哪里_最强的模型工作收纳站「Artty Station」登场!

大部分做模型的人,都有同一个梦想——那就是「属于自己的模型空间」。但很少有人,有足够的空间去收纳自己的模型工具。而现在,一款号称史上最强的模型收纳站「Artty Station」横空出世了,现在正在日本网站Makuake上进行众筹&#…

.NET6 中的 PriorityQueue

.NET6 中的 PriorityQueueIntro.NET 6 中引入了一个新的集合类型 PriorityQueue,正如它的名字那样,在普通的 Queue 基础之上增加了优先级的支持,接下来就一起来看一下怎么使用,以及一些常用的使用场景介绍。Get Started来看一个简…

简单而不简陋﹣wp7视觉点滴

一直就很期待,引入了Metro设计理念的wp7的真实操作体验,现在终于如愿了。拿到测试机,首先迅速的过了一遍,第一印象就是界面简单明了,没有华丽的高光、没有跌宕的质感,真的感觉就像在公共场所看到的信息指示…

ros发布节点信息python_vscode开发ROS1(13)-python实现话题通信(msg)

写在最前面1, ros也是可以使用python进行编程的, 而且相比c来说, ros更加简单.使用python创建第一个ROS程序1, 在ros_test目录下, 新建一个scripts文件夹.2, 修改CMakeLists.txt文件, 在find_package中添加rospyfind_package(catkin REQUIRED COMPONENTS roscpp ... #其他的包 …

BeetleX 之 WebApi网关1.5.8发布

这一版本的主要升级了BeetleX的基础网络库,主要解决在某些情况导致解释http协议cpu暴增长的问题,同时使用BeetleX新版本针对的IndexOf的优化,使http协议解释上有着一定程度的性能提升。新版本同样也是支持win64和linux64两个版本,…

egg前面加什么_国威说阀:阀门前面为什么加国标美标日标之类的?

原标题:国威说阀:阀门前面为什么加国标美标日标之类的?美标阀门就是美国标准的意思,通常称呼的美标球阀,美标闸阀和其它什么阀门都是按照美国标准制造出来的阀门其中一类。标准的编制说明是一个非常重要的文件。它阐明…

读《有效需求分析》

最近在一个技术群里看到张逸大佬强力推荐一本关于需求分析的书《有效需求分析》,于是在 Kindle 上下单了,读完后有一种相见恨晚的感觉。本书特点从书中的一些案例可以看出,作者擅长 ToB 软件的需求分析,如果您是从事的 ToB 软件的…

超时锁定计算机,就会发现多了一个控制台锁定显示关闭超时选项

小技巧:锁定屏幕方法多在临时要离开电脑时,可用CtrlAltDel组合键、WinL组合键或在开始菜单中单击用户头像选择“锁定”手动锁屏;或借用“屏幕保护设置”设定自动定时锁屏。1. 探寻自动锁屏时间修改离开电脑一段时间后Windows 10会自动锁屏,但…

android数据存放map_ES6 的新鲜玩意儿——集合set、map、WeekSet、WeekMap

es6新增了Set、Map、WeekSet、WeekMap 四种数据结构。C#中有HashSet和Dictionary,HashSet和Dictionary都是范式集合,但是es6不支持接口开发,所以也就不存在范式。Set 是存唯一值的集合,Map是存键值对的集合。WeakSet、WeakMap分别…

大牛领导单独找我聊了两句:搞框架的同时别忘了算法

前言程序数据结构算法,好的算法能让程序更高效的运行;在当今数据信息时代,数据分析和数据处理肯定是避免不了,而算法便成为了很多公司门槛级的要求,特别是大厂;赶紧搞起来,说不定离进大厂就只差…

C#使用iTextSharp操作PDF文件

概述html文件怎么转成PDF文件?有的招聘网上的简历导成DOC文件,不能直接使用,这样造成很大的困扰,那么它还有一个格式,那就是html格式。将文件导出成html格式,然后再转成PDF文件,这样便可以直接使…

springboot 历史版本文档_Springboot看视频学太慢?来看看这份阿里深入实践Springboot文档...

前言:之前 Spring Boot 2.2没能按时发布,是由于 Spring Framework 5.2 的发布受阻而推迟。这次随着 Spring Framework 5.2.0 成功发布之后,Spring Boot 2.2 也紧跟其后,发布了第一个版本:2.2.0。关于Spring Boot的性能…

51CTO技术沙龙4月23日第四期:如何快速定位******

人 在江湖飘,哪能不挨刀?没有跟***打过交道的运维人员能有多少?恐怕工作时间长的朋友大多都遇到过。我们除了做好防御之外,也可以尝试着像“盗梦空间”那 样了解******的动向。也可以从追踪***到挖掘***隐藏技术。当然&#xff0c…