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,一经查实,立即删除!

相关文章

VI3的VLAN配置:VST、EST和VGT标记

VMware专家谈及在VMware Infrastructure(VI3)中使用虚拟LAN(VLAN)时,他们通常是指VLAN Trunk的使用。不过,VI3使用的VLAN配置还有其他三种类型:Virtual Switch Tagging(虚拟交换机标记,缩写VST …

没错,纯SQL查询语句可以实现神经网络

我们熟知的SQL是一种数据库查询语句,它方便了开发者在大型数据中执行高效的操作。但本文从另一角度嵌套SQL查询语句而构建了一个简单的三层全连接网络,虽然由于语句的嵌套过深而不能高效计算,但仍然是一个非常有意思的实验。在这篇文章中&…

html5 控制鼠标移动,HTML5 Canvas随鼠标移动的引力粒子群

JavaScript语言:JaveScriptBabelCoffeeScript确定use strict;// Initial Setupvar canvas document.querySelector(canvas);var c canvas.getContext(2d);canvas.width innerWidth;canvas.height innerHeight;// Variablesvar mouse {x: innerWidth / 2,y: inn…

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

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

初中数学知识点总结_初中数学知识点总结大全_经典版_

初中数学必考知识点总结一、基本知识㈠、数与代数A、数与式:1、有理数有理数:①整数→正整数/0/负整数②分数→正分数/负分数数轴:①画一条水平直线,在直线上取一点表示0(原点),选取某一长度作为单位长度,规…

官方的正则表达式组件 RegularExpressions (4) : 表达式选项

TRegExOption (roNone, //无roIgnoreCase, //不区分大小写roMultiLine, //多行模式; 可使 ^ 和 $ 匹配每个行首或行尾roExplicitCapture, //只捕获指定了名称或编号的子表达式roCompiled, //预编译表达式; 这在反复使用更有效率roSing…

一篇文章,带你了解 “机器学习工程师” 必备技能图谱

5月8日,谷歌召开一年一度的Google I/O大会。在现场演示的演示中,Google Assistant表现得自然流畅,电话那头的理发店员工丝毫没有察觉到自己竟然是在和AI对话!阿里的王坚博士曾在一次主题演讲里谈到:「不要担心 AI 毁灭…

俄语使用计算机怎么说,计算机俄语常用词汇

计算机俄语常用词汇аксессуары 附件микрофон 话筒наушники 耳机MIDI клавиатура MIDI键盘MP3 плеер MP3播放器очки 眼镜иктофон 录音机ержатель копий 拷贝存放夹Принтеры 打印机матричный…

一日一技:在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…

Insus Binary Utility

一个将数据流转换为binary(二进制)数据小工具,返回字符串。可以在三层架构中的二层程序处理数据流。 使用时需要引用名称空间using Insus.NET; 类别名称InsusBinaryUtility,需要实例化。 下载地址:http://download.cnblogs.com/insus/library…

圆周率里有每个人的银行卡密码和生日?混知乎的程序员果然都是神一般的存在...

有人好奇,既然圆周率是无限不循环小数,会不会包括这个世界上的任何信息,包含了这个世界?能否包含“任何信息”不好说,但一个冷知识是,圆周率里有每个人的银行卡密码!不信?看看这位来…

如何提高Debug效率

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

中断原理在计算机中的应用,最新 计算机原理与应用 复习3-判断题

最新 计算机原理与应用 复习题目1.INTR、INTA和NMI信号都是与中断有关的信号。( ) √2.8088在访问存储器时,必须用HOLD和HLDA两条信号线指示出总线是否可用。( )3.在8088时序中,在时钟周期T4状态期间,S2S1S0的任何变化指示一个总线周期的开始…

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

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

open*** 结合pam_mysql认证 failed to authenticate: Permission denied

open***的认证有很多方式,比如证书认证,用户名密码认证,而用户名密码认证也可用通过两种方式实现,一是使用pam_mysql实现open***利用mysql认证,二是使用radius实现open***利用mysql认证,网上这种配置都很多…

用文本挖掘剖析近5万首《全唐诗》,发现了这些有趣的秘密

楔子近些年来,弘扬中华传统文化的现象级综艺节目不断涌现,如《中国汉字听写大会》、《中国成语大会》、《中国谜语大会》、《中国诗词大会》等,其背后的社会成因,在于人们对中国文化中最精致文字的膜拜心理,虽然浸淫于…

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

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

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

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

web页面在线编辑功能

首先在web.config文件中添加 <system.web> <httpHandlers> <add verb"GET" path"FtbWebResource.axd" type"FreeTextBoxControls.AssemblyResourceHandler,FreeTextBox"/> </httpHandlers></system.web> 注…