更多技术交流、求职时机,欢迎重视字节跳动数据渠道微信公众号,回复【1】进入官方交流群

DataLeap 是火山引擎数智渠道 VeDI 旗下的大数据研制管理套件产品,协助用户快速完结数据集成、开发、运维、管理、财物、安全等全套数据中台建造,降低作业本钱和数据保护本钱、挖掘数据价值、为企业决策供给数据支撑。

数据血缘是协助用户找数据、了解数据以及使数据发挥价值的根底才干。根据字节跳动内部沉淀的数据管理经验,火山引擎 DataLeap 具有齐备的数据血缘才干,本文将从数据血缘应用布景、开展概略、架构演讲以及未来展望四部分,为大家介绍数据血缘在字节跳动进化史。

布景介绍

1. 数据血缘是数据财物渠道的重要才干之一

在火山引擎 DataLeap 中,数据财物渠道首要供给元数据查找、展示、财物管理以及知识发现才干。在数据财物渠道中,数据血缘是协助用户找数据、了解数据以及使数据发挥价值的重要根底才干。

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

2. 字节跳动的数据链路状况

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

数据来历

在字节跳动,数据首要来历于以下两部分:

  • 榜首,埋点数据:

首要来自 APP 端和 Web 端。经过日志收集后,这类数据终究进入到音讯行列中。

  • 第二,事务数据:

该类数据一般以在线方法存储,如 RDS 等。

中心部分是以 Hive 为代表的离线数仓:

该类数据首要来自音讯行列或许在线存储,经过数据集成服务把数据导入离线数仓。经过离线数仓的数据加工逻辑,流通到以 ClickHouse 为代表的 OLAP 引擎。

别的,在音讯行列部分,还会经过 Flink 使命或许其他使命对 Topic 分流,因而上图也展示了一个回指的箭头。

数据去向

首要以目标体系和报表体系为代表。目标体系包括重要且常用的事务目标,如抖音的日活等。报表体系是把目标以可视化方法展示出来。

数据服务

首要经过 API 供给数据,具体而言,从音讯行列、在线存储、下流消费以及上图右侧所示的数据流通,都包括在数据血缘范围内。

血缘开展概略

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

接下来介绍血缘在字节跳动的三个开展阶段。

榜首阶段:2019 年左右开端

榜首阶段首要供给数据血缘根底才干,以 Hive 和 ClickHouse 为代表,支撑表级血缘、字段血缘,触及 10+元数据。

第二阶段:从 2020 年初开端

第二阶段引进了使命血缘,一起支撑的元数据类型进行扩大,到达 15+。

第三阶段:从 2021 年上半年至今

在这一阶段,咱们对整个元数据体系(即前文说到的财物渠道)进行了 GMA 改造,同步对血缘架构进行全面晋级,由此支撑了更丰厚的功用,具体包括:

  • 首要,元数据品种扩大到近 30 种且时效性提高。 之前以离线方法更新血缘数据,导致数据加工逻辑改变的第二天,血缘才会发生改变。现在,根据近实时的更新方法,数据加工逻辑在 1 分钟内即在血缘中表现。

  • 其次,新增血缘消费方法的改变告诉。因为该版别支撑实时血缘,事务方发生及时了解血缘改变的需求,改变告诉功用便是把血缘改变状况以音讯行列的方法奉告事务方。

  • 再次,支撑评价血缘质量。 新增一条链路,专门服务于血缘数据质量。

  • 终究,引进标准化接入方法。为了减少重复作业、降低血缘接入本钱,咱们制定了具体的血缘接入标准,事务方数据均以标准化方法接入。

以上便是全体的开展状况,现在处于第三个版别当中。

数据血缘架构的演进

接下来介绍血缘架构的演进。

  1. 榜首版血缘架构:建立血缘根本才干,初探运用场景

血缘架构

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

  • 在数据来历方面,现在血缘首要包括两个数据来历(见上图左上角):

榜首,数据开发渠道: 用户在开发渠道写使命,并对数据加工,由此发生血缘数据。

第二,追踪数据: 第三方渠道(即便命渠道)对用户埋点等数据进行核算,也会发生血缘信息。

  • 在血缘加工使命方面(见上图中心部分):

这部分会对使命进行血缘解析,发生血缘快照文件。因为榜首版采用离线方法运转,每天该血缘使命均会生成对应的血缘快照文件。咱们经过比照前后两天的血缘快照文件,来获取血缘的改变状况,然后把这些改变加载到图中。

除此之外,血缘中触及的元数据会冗余一份,并存储到图里。

  • 在血缘存储方面(见上图右边部分),除了图数据库之外,血缘自身也会依靠元数据的存储,如 Mysql 以及索引类存储。
  • 在血缘消费层面,榜首版只支撑经过 API 进行消费。

终究总结该版别的三个要害点:

  • 血缘数据每天以离线方法全量更新
  • 经过比照血缘快照来判别血缘更新操作,后边将为大家具体解答为什么要经过比照的方法。
  • 冗余一份元数据存储到图数据库中。

存储模型

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

图中上半部分为表级血缘,只包括一品种型节点,即表节点,比方 Hive 表、 ClickHouse 表等。

图中下半部分为字段血缘,榜首版首要是供给构建血缘的根本才干,因而用互相分离的两张图来完结。因为血缘中元数据进行了冗余,每个图里边的每个节点里边都存储表相关的元数据,包括事务信息以及其他信息。

除此之外,咱们会预先核算一些核算信息,保存到图的节点中,如当前节点下流总节点数量、下流层级数量等。

采用预先核算的目的是为了“用空间换时间”,在产品对外展示的功用上或许要显露数据信息,假如从图里实时查询或许影响功能,因而采用空间换时间的方法来支撑产品的展示。

  1. 第二版血缘架构:血缘价值逐渐表现,运用场景拓宽

血缘架构

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

经过 1 年的运用,血缘在数据财物中的价值逐渐表现,且不断有应用场景落地,由此咱们进行了第二版别晋级。晋级点具体包括:

  • 榜首,去除榜首版别中元数据冗余。 元数据冗余在图提高了功能,可是或许导致 Metadata Store 的元数据不共同,给用户带来困扰。

  • 第二,去掉了预核算的核算信息。跟着血缘的数据量增多,预核算的信息透出不能给很好辅佐用户完结事务判别,且导致使命负担重。比方,即便知道某一节点的下流数据量,仍是要拉出所有节点才干进一步分析或决策。

  • 第三,支撑一条全新链路,在新增链路上,咱们把血缘快照文件导入离线数仓,首要应用于两个场景:

    离线分析场景或全量分析场景。

    根据离线数仓的血缘数据完结数据监控,尽早发现血缘反常状况。

因而,从第二版开端,数据血缘新增了许多离线消费方法。

存储模型

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

第二个版别引进了全新血缘存储模型(如上图所示),并将榜首个版别两张图融合成一张图,解决了无法经过表遍历字段血缘的问题。

除此之外,第二个版别还引进了使命类型节点,服务于以下三种遍历场景:

  • 单纯遍历数据血缘,即从数据节点到数据节点。

  • 数据血缘和使命血缘混合方法

  • 单纯使命之间血缘联系

  1. 第三版血缘架构:血缘成为数据发挥价值的重要根底才干

血缘架构

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

2021 年初,火山引擎 DataLeap 数据血缘迭代到第三版,也成为公司内部数据发挥价值的重要根底才干。

服务于事务方对数据高质量要求,第三版晋级点如下:

  • 血缘数据来历: 除了支撑两个渠道之外,还支撑包括报表、第三方用户画像等其他渠道
  • 血缘使命: 之前版别只支撑每天定时运转的离线调度方法,第三版引进实时消费方法,支撑实时解析血缘,并提取通用逻辑,复用离线血缘使命和实时血缘使命。
  • 血缘解析: 不同类型使命需求运用不同解析逻辑。在之前版别中,Hive SQL 使命和 Flink SQL 使命的解析逻辑是集成到血缘使命中。从第三版开端,咱们把解析服务拆解成可配置的插件,完结了插件化。当某一种使命类型的血缘解析逻辑需求调整的时候,只用改动其中一个解析服务,其他解析服务不受影响,一起也让血缘使命更好保护。
  • 元数据存储统一: 只依靠图数据库和索引存储,一起支撑从体系中把所有相关的数据导出离线数仓。
  • 实时消费: 血缘发生改变的信息会被同步到音讯行列。
  • 血缘的验证模块: 运用方对血缘数据质量有高要求,因而第三版引进新的血缘的验证模块

验证的前提是要有引擎埋点数据,该埋点数据能清楚知道某一个使命具体读取数据状况、写入数据状况

在离线数仓中,经过埋点数据与血缘数据中比照,生成血缘数据质量报表。

数据质量报表对血缘消费者敞开,消费者能够明晰了解每个血缘链路精确性和掩盖状况。

  • 血缘标准化接入: 即让用户快速接入数据,不必每一种血缘接入都重复写逻辑。

存储模型

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

第三版血缘存储模型相对于前两版的晋级点如下:

  • 以使命为中心。黄色圆圈为使命节点,数据加工逻辑发生血缘,因而咱们把数据加工逻辑笼统为使命节点,血缘的建立则以使命为媒介,使命成为血缘中心。也便是说,表 1、表 2、表 3 之间的血缘,是经过使命 a 完结构建。假定没有使命 a ,则三个表之间的血缘也不存在。
  • 表血缘和字段血缘模型统一,在字段血缘之间没有具体使命的状况下,咱们会笼统出虚拟的使命来统一模型。由此,使命和使命之间的血缘采用新的边来表明依靠联系。

重要特性

增量更新

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

在实时血缘根底上,咱们还支撑增量更新才干,即当某一个使命的加工逻辑发生改变时,只需求更新图中一小部分。

  • 血缘创立: 数据加工逻辑上线或开端收效,将被笼统为图数据库的操作,即创立一个使命节点和对应的数据节点,并创立两者之间的边。上图比如为表 1、表 2 和使命的边,以及使命和表 3 之间的边。

  • 血缘删去:数据的加工逻辑发生了下线、删去或不收效。 先在图里边查询该使命节点,把使命节点以及相关血缘相关的边删去。血缘存储模型以使命为中心,因而表 1、表 2 和表 3 之间的血缘联系也同步消失,这部分血缘即被删去。

  • 血缘更新:使命自身没有发生上线或下线,但核算逻辑发生改变。 例如,原本血缘联系是表 1、表 2 生成表 3,现在变成了表 2、表 4 生成表 3。咱们需求做的如下:

解分出最新血缘状况,即表 2、表 4 到表 3 的血缘联系,与当前血缘状况做比照(首要比照该使命 a 相关的边),上图比如是入边发生改变,那么删去其中一条边,构建别的一条边,即可完结该使命节点的血缘更新。

假如面临以上血缘联系改变,可是没有该使命节点,应该执行哪些操作来更新血缘?因为只要血缘最新状况和当前状况,没有使命节点去获取最小单位的血缘联系,所以只能进行全量血缘或全图比照,才干得出边的改变状况,再更新到图数据库中。假如不进行全量血缘或全图比照,无法知晓如何删去条和创立条,导致血缘无法更新。这也是前两个版别需求进行血缘快照比照的原因。

血缘标准化

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

在火山引擎 DataLeap 中,通常把血缘数据接入笼统成一个 ETL 。

首要,血缘数据来历,即第三方渠道血缘相关的数据,通常是一个数据加工逻辑或许称为使命。接着,对这些使命完结 KeyBy 操作,并与数据财物渠道的使命信息做比照,确定如何进行任何创立、删去和更新。

在再完结过滤操作之后, 由 Lineage Parser 对创立、更新等使命进行血缘解析,得出血缘结果之后会生成表明图相关操作的 Event,终究经过 Sink 把数据写入到数据财物渠道中。

上图绿色和蓝色别离表明:

  • 蓝色:对不同血缘接入过程的逻辑共同,可笼统出来并复用。

  • 绿色:不同血缘的完结状况纷歧样。例如,某一个渠道为拉取数据,别的一个渠道经过其他方法获取数据,导致三个部分纷歧样,因而咱们抽取特殊部分,复用共同部分。除此之外,咱们还供给通用 SDK,串联整个血缘接入流程,使得接入新的血缘时,只需求完结绿色组件。

现在,字节跳动内部事务已经能够运用 SDK 轻松接入血缘。

数据血缘质量-掩盖率

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

当血缘开展到必定阶段,事务方不止关怀血缘掩盖状况、支撑状况,还关怀血缘数据质量状况。因而,第三版别透出血缘质量相关目标——掩盖率和精确率。

掩盖率:血缘掩盖的数据财物数占重视的财物数量占比

重视的数据财物一般指,有出产使命或有出产行为的财物。上图虚线圆圈,如 Table 9,用户创立该表后没有出产行为,因而也不会发生血缘,在核算中将被剔除掉。上图实线圆圈,表明有出产行为或有使命读取,则被认为是重视的财物。重视的数据财物被血缘掩盖的占比,即掩盖率。

以上图为例,在 10 张表中,因为有使命与 Table 1 ~ 8 相关,因而断定有血缘。 Table 10,它与 Task-D 之间的连线是虚线,表明本来它应该有血缘,可是实际上血缘使命没把这个血缘联系解分出来,那么咱们就认为这个 Table 10 是没有被血缘掩盖的。全体上被血缘掩盖的财物便是表 1 ~ 8。除了 Table 9 之外,其他的都是重视的财物,那么血缘掩盖的财物占比便是 8/9。也便是图上蓝色的这第 8 个除以蓝色的 8 个加上 Table 10,便是 9 个,所以这个掩盖率便是 88%。

数据血缘质量-精确率

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

掩盖血缘不必定是正确的,所以咱们还界说了精确率目标,即血缘精确的使命数/同类型的使命数。

举个比如,假定使命 c 的血缘应该是 Table 5、Table6 生成 Table 7,但实际上被遗失,没有被解析(虚线表明),导致使命 c 的血缘不精确。也存在其他状况缺失或多余状况,导致血缘不精确。

在上图中,同类型使命包括 4 个,即 a、b、c、d。那么,精确的血缘解析只要 a、b,因而精确率占比为 2/4 = 50%。

在火山引擎 DataLeap 中,因为血缘来历是使命,因而咱们以使命的视角来看待血缘精确率。

血缘质量-字节现状

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

在掩盖率部分,现在 Hive 和 ClickHouse 元数据掩盖度较高,别离到达 98%、96%。对于实时元数据,如 Kafka ,相关 Topic 掩盖 70%,其他元数据则稍低。

在精确率部分,咱们区别使命类型做精确性解析。如 DTS 数据集成使命到达 99%以上,Hive SQL 使命、 Flink SQL 使命是 97%、81% 左右。

血缘架构比照

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

上图为三个版别比照状况:

  • 血缘的消费方法:榜首版只支撑 API 的方法,用户需求在数据财物渠道上查看血缘信息;第二版支撑离线数仓,让用户能够全量分析血缘;第三版支撑音讯行列,运用户能够获取血缘增量的改变。
  • 增量更新: 第三版开端支撑增量更新。
  • 血缘使命: 第二个版别开端支撑使命血缘,第三个版别支撑数据质量。
  • 元数据存储统一: 第三版进行了元数据架构晋级,使得元数据和血缘存储在同一个当地。
  • 新血缘接入耗时: 前两个版别大概需求花费 7-10 天左右。第三版别引进标准化,外部事务方或字节内部用标准化流程,完结 3、4 天左右完结开发、测验、上线。

未来展望

榜首,继续对架构和流程进行精简。 现在,血缘使命分为离线和实时两部分,但没有彻底统一。在插件化、横向扩展等方面也需求加强。

第二,生态化支撑。 现在支撑公司内部的元数据,未来方案拓宽对开源或外部元数据的支撑。在血缘标准化方面,供给一站式数据血缘才干,作为根底才干渠道为事务方供给服务。

第三,提高数据质量。 除了血缘数量,还需求继续提高质量。一起因为数据链路复杂,导致链路问题排查反常困难,未来咱们也会支撑快速诊断。

终究,支撑智能化场景。 结合元数仓等数据,供给包括要害链路梳理在内的智能化才干。现在,当事务方发现数据有问题之后,首要经过按照血缘数据一个一个排查方法解决,导致效率低下。未来,咱们将考虑透出血缘要害链路,提高排查效率。

以上介绍的数据血缘才干和实践,现在大部分已经过火山引擎 DataLeap 对外供给服务。

点击跳转 大数据研制管理套件 DataLeap 了解更多