流式数据质量监控的技术调研及选型思考
本文是字节跳动数据质量平台针对流式数据质量监控的技术调研及选型思考。
目前,字节跳动数据质量平台对于批处理数据的质量管理能力已经十分丰富,提供了包括表行数、空值、异常值、重复值、异常指标等多种模板的数据质量监控能力,也提供了基于 spark 的自定义监控能力。另外,该平台还提供了数据对比和数据探查功能,为用户在数据开发阶段及时发现数据质量问题提供了便利的手段。
长期以来,数据质量平台的各项能力都只支持 batch 数据源(主要是 Hive),没有流式数据源(如 kafka)的质量监控能力。但其实流式数据与 batch 数据一样,也有着数据量、空值、异常值、异常指标等类型的数据质量监控需求,另外因流式数据的特殊性,还存在着数据延迟、短时间内的指标波动等特有的监控需求。
此前部分数据质量平台用户为了监控流式数据质量,选择将流式数据 dump 到 hive,再对 hive 数据进行监控。但这种方式的实时性较差,若有数据质量问题,只能在 T+1 后报出。且对于很多流式任务的“中间”数据,原本不需要落地,为了监控而落到 hive,存在着大量的资源浪费。
为更好地满足流式数据用户的数据质量监控需求,同时填补数据质量平台在流式数据源方面的空白,字节跳动数据质量平台团队于 2020 年下半年,以 Kafka 数据写入延迟监控为切入点,陆续调研、开发、上线了一系列基于 Flink StreamSQL 的流式数据质量监控。
本文为系列文章的上篇,重点介绍字节跳动数据质量平台技术调研及选型的思考。
在 2020 年下半年,我们决定支持流式数据的质量监控,随即开展了业内的技术调研。主要基于公开的分享或文档资料,调研了 Apache Griffin,以及其他四家厂商对应的产品。
调研分析了相关友商的计算引擎、主要技术实现、产品形态、数据落地形式等,调研的汇总结果如下表所示:
调研主要结论
各产品的计算引擎均使用 Spark 或 Flink,二者都能解决需求,在稳定性和性能上也没有显著的差异。实际上各产品在计算引擎选取方面,主要考虑的是已方的技术栈、技术积累、计算引擎与已方技术架构的融合度等。如 D 厂的主要业务是做 Spark 的商业化产品,引擎自然地使用 Spark;M 厂的相应产品产生的背景也是基于 Flink 在该厂的应用和推广。
除 Apache Griffin 由于采用了先流转批、再复用批处理能力的策略,指标产出延迟为分钟级外,其它指标产出延迟均为秒级。需注意的是指标产出延迟并非报警的延迟。实际报警的延迟时间还受所采用的报警引擎的触发方式、轮询执行周期等影响。
各产品均未由计算引擎直接触发报警,而是由计算引擎计算出对应的数据质量指标数据,存到下游 sink 后,再基于 sink 中的数据,检测及触发报警。同时还可基于 sink 中的数据提供灵活的报表、可视化服务。这其实是业内较为普遍的作法,即计算引擎只负责计算,后续监控和报警功能由专门的监控报警引擎负责。
选型结果:选型 Flink SQL
基于上述友商调研,考虑到当前字节跳动在流计算方面主要的计算引擎为 Flink,在 kafka/各类 MQ - Flink 的数据流实时计算方面已经有了很多的技术积累,使用 Flink 的接入成本相对更低,且能获得更充足的技术支持,我们决定选择 Flink 作为流式数据质量监控的计算引擎。
确定使用 Flink 为计算引擎后,在实际实现时,仍有两个选择:可以使用 Flink SQL API,也可以使用更为底层的 Flink DataStream API。
我们最终决定选择使用 Flink SQL API,原因如下:
从性能上看,使用 SQL API 不会比使用 DataStream API 性能差。Flink SQL 最终也会编译成 Java 代码执行,二者并无本质差别。
从功能上看,当前 Flink SQL 的语法已经很丰富,支持 kafka、RocketMQ 等常用流式数据源和 MySQL、TSDB 等 sink。另外字节跳动 Flink 团队也会根据公司内用户的需求,开发一些定制化的功能,如支持 kafka header 数据字段等。Flink SQL 能够满足大部分的流式数据质量监控的功能需求。
从使用友好程度上看,在进行规则配置转化时,SQL API 相对 DataStream API 更友好,更易于实现,更便于调试。在增加新的流式监控类型和新 feature 时,开发人员主要需考虑如何拼 SQL 计算对应的监控指标,且可直接使用 Dataleap 数据开发平台的 Flink SQL 作业进行调试。另外,直接使用 SQL API,更容易支持用户自定义 SQL 指标的监控规则。
在下篇中,将重点分享我们基于 Flink SQL 的流式数据质量监控的实践细节。
附-本文参考资料
http://griffin.apache.org/docs/profiling.html
How to Monitor Data Stream Quality Using Spark Streaming and Delta Lake
https://github.com/awslabs/deequ
欢迎关注字节跳动数据平台同名公众号
版权声明: 本文为 InfoQ 作者【字节跳动数据平台】的原创文章。
原文链接:【http://xie.infoq.cn/article/c472bf7de63be067043e2b4ec】。文章转载请联系作者。
评论