
DataLeap
-
完整性:指数据的记录和信息是否完整,是否存在缺失的情况。数据缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成统计结果不准确,所以说完整性是数据质量最基础的保障。在做监控时,需要考虑两个方面:数据条数是否少了;某些字段的取值是否缺失。完整性的监控,多出现在日志级别的监控上,一般会在数据接入的时候来做数据完整性校验。 -
准确性:指数据中记录的信息和数据是否准确,是否存在异常或者错误。一般准确性的监控多集中在对业务结果数据的监控,比如每日的活跃、收入等数据是否正常。 -
一致性:指同一指标在不同地方的结果是否一致。数据不一致的情况,多出现在数据系统达到一定的复杂度后,同一指标会在多处进行计算,由于计算口径或者开发人员的不同,容易造成同一指标出现不同的结果。 -
及时性:在确保数据的完整性、准确性和一致性后,接下来就要保障数据能够及时产出,这样才能体现数据的价值。及时性很容易理解,主要就是数据计算出来的速度是否够快,这点在数据质量监控中可以体现在监控结果数据是否在指定时间点前计算完成。 -
规范性:指数据是否按照要求的规则进行存储,如邮箱校验、IP 地址校验、电话格式校验等,具有一定的语义意义。 -
唯一性:指数据是否有重复,如字段的唯一值、字段的重复值等。

-
数据探查:可以根据各种维度来查看数据明细和分布情况。 -
数据对比:开发同学可能经常会发现线上表和测试表不一致,所以我们在任务上线的环节提供了数据对比的功能。 -
任务监控:监控线上数据,提供报警和熔断功能。
数据质量监控最有用的场景是防止数据问题蔓延到下游。举个例子:数据任务产出一张 Hive 表,该表可能会同步一些信息到 Hive metastore(HMS)。HMS 的主从架构可能存在一定的延迟,假设 HMS 出现问题,下游任务可能会读到脏数据,这时如果我们使用数据质量监控,就能及时发现问题,阻止下游任务运行。
DataLeap
目前我们的数据质量挑战有哪些?可以通过几个用户 case 了解一下。
-
离线监控,主要是不同存储的数据质量监控,比如 Hive 或者 ClickHouse 。 -
字节跳动内部的广告系统对时效性和准确性要求很高,如果用微批系统 10 min 才做一次检测,可能线上损失就上百万了甚至千万了。所以广告系统对实时性要求相对较高。 -
另外一个是复杂拓扑情况下的流式延迟监控。 -
最后是微批,指一段时间内的定时调度,有些 Kafka 导入 ES 的流式场景,需要每隔几分钟对比下前一周期。
面临这些挑战,我们的解决方案是什么?
DataLeap
产品功能架构
-
离线数据质量监控:解决批和微批监控场景,支持 Hive、ClickHouse、ES 等多种数据源,并有字段、唯一性等多种监控维度,允许通过 SQL 自定义维度聚合进行监控。 -
流式数据质量监控:解决流式监控场景,支持 Kafka/BMQ 等数据源。 -
数据探查:解决数据开发之前对数据内容存疑问题,支持 Hive 数据源。 -
数据对比:解决新旧表数据一致性问题,支持 Hive/Hive SQL 数据源。

-
Scheduler:外部调度器,触发离线监控。主要分两种类型: -
对外提供 API 调用任务; -
定时调度,通过 calljob 调用数据。 -
Backend:后端服务,偏服务层,处理业务逻辑。主要负责: -
质量平台和外部的交互,所有 API 响应都是通过这一层进行; -
任务提交:用户在质量平台配置的规则会放到业务存储,Scheduler 被调用后,Backend 会将任务相关的参数配置进行任务提交; -
获取质量监控的结果并进行判断,然后和外部系统进行交互,在需要时发送警报通知用户。 -
Executor:平台核心的任务执行模块,集成了一些引擎,例如数据探查使用 OLAP 引擎。质量监控部分使用 Griffin 的 Measure 进行数据统计。 -
Monitor:是一个相对独立的模块,主要进行状态服务的流转,提供重复报警等功能。 Alert Center:质量平台强依赖于该平台。它是外部报警服务,接收各种报警事件。
离线数据检测流程
下面看一下离线数据的检测流程。
-
监控触发:调度系统调用质量模块 Backend API; -
作业提交:Backend 以 Cluster 模式提交 Spark 作业至 Yarn; -
结果回传:作业结束 (成功、失败),Driver 将结果 sync 至 Backend; -
消息触发:Backend 根据结果触发相应动作 (例如:报警、消息提示)。
-
调度系统低耦合:数据质量平台没有和调度系统强绑定,一般可以用业务系统的 API 实现互相调用。 -
事件触发高效,Backend 水平扩展能力强:Backend 是无状态的实例服务,如果质量监控的业务系统较多,Backend 可以采用水平扩展的方式部署,接收请求并提交作业。 -
没有 Quota 限制:平台本身没有维护数据质量监控单独需要的资源队列,而是把这个权限开放给用户,用他们自身的资源做资源监控。这样就把 Quota 问题转换成了用户资源问题。
-
非 CPU 密集型查询较重:整个平台的设计是以任务提交的方式完成离线场景的需求。但是后来我们发现其实不需要启动 Spark 的作业仍然会启动一个 Spark 作业,如 ES SQL 查询,这个查询是很重的。 依赖 Yarn 做调度稳定性不高:平台上的任务在资源不充足或被挤占的情况下,会出现任务运行或调用很慢。
流式监控执行
-
根据规则定义,创建 Flink 作业; -
根据报警条件,注册 Bosun 报警事件; -
Flink 作业消费 Kafka 数据,计算监控指标写 Metrics; -
Bosun 基于 Metrics 的时序数据,定时检测,触发报警; -
Backend 接收报警回调,处理报警发送逻辑。
-
适配数据源 -
数据转化为 DataFrame -
规则转化为 SQL 操作 -
计算结果
-
扩展性要足够强,能够适配不同的数据源,如 Hive,MySQL 等等 -
计算性能要较强 -
支持的监控类型种类需要足够多
-
改造数据源、Sink 使其能够通过 HTTP 访问远程 API; -
部分功能增强、修改,例如:支持正则表达式; -
流式监控从 Spark Engine 切换为 Flink Engine,优化整体流式监控方案。Measure 本身是 Spark 生态的一部分,只能用 Spark Engine 做理线或者用微批模拟流式做监控。字节跳动内部本身有一定的 Flink 的能力,并且 Flink 对流式数据的处理能力比微批要好很多,所以我们就进行了这样的改造。

-
有状态服务,主节点对外提供服务;主备保证 HA -
接收 Backend 事件:监控失败、报警 内存定时队列,事件性触发机制。
DataLeap
前面介绍了数据质量平台的一些实现方式,下面为大家介绍一些我们在数据量和资源这两个方面的最佳实践。

注:这个功能需要推动底层服务配合支持,比如 Spark 需要把保存在本地 metric 里面的信息写入到 HMS 中,其他数据传输系统也需要支持。
-
裁剪掉部分异常数据收集功能; -
优化非必要的 join 流程。
-
根据不同的监控类型,添加不同的参数 (shuffle to hdfs 等); -
根据监控特性,默认参数优化(上调 vcore 等)。

流式监控支持抽样 & 单 Topic 多 Rule 优化
Kafka 数据抽样
一般流式数据的问题都是通用性问题,可以通过数据采样发现问题。因此我们开发了数据采样的功能,减少数据资源的占比消耗。Flink Kafka Connector 支持抽样,可直接操作 kafka topic 的 offset 来达到抽样的目的。比如,我们按照 1% 的比例进行抽样,原来上 W 个 partition 的 Topic,我们只需要 ** 个机器就可以支撑。
单 Topic 多 Rule 优化
DataLeap
本文介绍了数据质量平台的实现和最佳实践,最后谈谈平台未来的演进方向。
-
底层引擎统一,流批一体:目前平台的离线任务大部分是基于 Spark 完成的,流式数据采用了 Flink 处理,OLAP 引擎又引进了 presto,导致这套系统架构的运维成本比较高。我们看到 Flink 目前的 presto 能力和 Flinkbatch 的能力也在不断发展,因此我们后续会尝试切一些任务,做到真正意义上的统一引擎。 -
智能:引入算法进行数据驱动。考虑引入 ML 方法辅助阈值选取或者智能报警,根据数据等级自动推荐质量规则。举几个例子,比如我们可以基于时序算法智能的波动率监控来解决节假日流量高峰和平常的硬规则阈值的提升。 -
便捷:OLAP 对性能提升比较显著,但是目前我们只用在了数据探查功能上。后续可以将 OLAP 引擎应用于质量检测、数据据探查、数据对比应用与数据开发流程。 -
优化:比如通过单一 Job,同时运行多个监控,将监控和数据探查结合。我们现在在尝试将数据质量的规则生成和数据探查做结合,做到所见即所得的数据和规则的对应关系。
相关产品介绍
火山引擎大数据研发治理套件DataLeap
一站式数据中台套件,帮助用户快速完成数据集成、开发、运维、治理、资产、安全等全套数据中台建设,帮助数据团队有效的降低工作成本和数据维护成本、挖掘数据价值、为企业决策提供数据支撑。后台回复数字“2”了解产品
火山引擎E-MapReduce
支持构建开源 Hadoop 生态的企业级大数据分析系统,完全兼容开源,提供 Hadoop、Spark、Hive、Flink 集成和管理,帮助用户轻松完成企业大数据平台的构建,降低运维门槛,快速形成大数据分析能力。后台回复数字“3”了解产品
湖仓一体分析服务LAS
湖面向湖仓一体架构的Serverless数据处理分析服务,提供一站式的海量数据存储计算和交互分析能力,完全兼容 Spark、Presto、Flink 生态,帮助企业轻松完成数据价值洞察。后台回复数字“4”了解产品
点击阅读原文,还有机会了解团队招聘情况哦!
- End -


