​流!流!流数据质量检测系统,Flink引擎实现动态加载规则

2020-09-03 浏览量:783

目录

 

1.背景

 

2.流数据质量管理

 

3.Flink流数据质量检测系统实现

 

3.1总体介绍

 

3.2检测规则说明

 

3.3动态加载检测规则的设计实现

 

4.总结


 

背景

 

        实时流数据的应用场景越来越多且比重日益增长,风控、标签系统精准营销、监控、实时数据仓库、实时报表和特征工程等等系统对实时流数据的应用。

 

        所谓流数据是指由数千个数据源持续生成的数据,通常也同时以数据或消息记录的形式发送,单条数据或消息规模较小(约几千字节)。流数据包括多种数据,如客户使用移动或 Web 应用程序生成的日志文件、网购数据、埋点数据、游戏内玩家活动、社交网站信息、金融交易大厅或地理空间服务,以及来自可穿戴设备数据等,一般是半结构化、非结构化数据类型。

 

        实时流数据具有响应快,延迟低的优势。大约几秒或几毫秒的低延迟,可对滚动时间窗口内的数据或仅对最近的数据记录进行查询或处理。

 

        对实时流数据的采集、处理和应用的好处是显而易见的。但流数据也数据,同样具有质量问题,如消息数丢失、内容缺失的不完整问题;重复、逻辑异常的不准确问题;重复数据的不唯一问题;超出合理数据内容长度、数值范围、内容格式、枚举值异常等数据无效问题等等。

 

        面对上述列举一系列流数据质量问题,对实时流数据质量进行检测及管理的需求日益增强。本篇文章来讲使用Flink实现动态加载规则的流数据质量检测管理系统。

 


 

流数据质量管理

 

        之前,笔者也详细讲述了批数据质量检测系统实现过程:数据治理系列:一个数据质量监控系统的自我修养,读者自行翻阅,笔者这里不再赘述。流质量检测管理,若直接对接消息系统检测之后再让下游系统使用,这样对检测规则配置参数的准确性、检测系统的稳定性、准确性等都是很大的挑战。如果只是检测输出检测明细和统计,再根据异常结果对流数据质量再迭代优化的方式要相对简单很多。但流质量检测实现的方式和难易程度上都有很大的不同。

 

        从数据形式上,批数据质量检测是按月、按天、小时的分区批量数据进行一次质量检测结束后,产出检测结果,并判断是否产生告警,而流数据是像流水一样不停地流逝,对单条数据或窗内微批数据进行源源不断进行检测,持续地并产生检测结果。

 

        从检测结果输出上,批数据检测,因是对批数据检测,无论异常或正常都可以这批数据的结果,数据量也不会大,流数据是对单条数据或窗口数据检测,如果无论正常和异常都会数据写如结果表,对下游写数据库和存储都有很大的压力,流数据质量检测建议只输出异常结果。

 

        从对下游数据是否熔断上,批数据检测任务一般是由调度工具触发的,如果此张表出现质量问题,可以停止当前调度继续向下执行,以免造成下游数据污染,而流数据检测任务是流计算引擎驱动的,一旦启动不会停止(除非宕机等异常停止)即使出现异常记录,也难以阻止上游系统流数据的停止。

 

        除了上述几个方面的不同,当然还有实现难度的不同。从技术上,批数据检测实现相对简单一些,流数据检测相对复杂,如流数据质量检测实现动态加载检测规则等等。下面部分也会讲到如何使用Flink实现动态加载检测规则的实现。

 


 

Flink流数据质量检测系统实现

 

  • 总体介绍

     

        流质量检测系统可对对接Kafka和RocketMq等消息数据源,使用Flink引擎低阶算子实现可动态加载检测规则,从有效性、唯一性、准确性、完整性、一致性和自定义检测7大类对流式数据进行质量的检测。实现多级别告警机制、多维度统计异常问题、元数据表结构变更通知等等。和之前讲过的批数据质量检测系统有不少相似之处,这里不再赘述。

 

  • 流质量检测系统-流程图

     

      用户通过界面配置的规则,点击执行启动flink程序执行,初始化规则配置信息,对流数据进行检测,如果执行过程识别到有新增或者变更检测规则,会重新初始化一次配置型规则到相关规则的内存数据结构,相当于新检测规则的动态加载。

 

  • 检测规则说明

     

         根据规则特性分为带窗口和不带窗口的规则,下面简单列举下实现的检测规则。这里规则就不再详细说明,详细可参考原来批质量检测系统的实现。

 

 

需要说明的是,这些带窗口的规则支持多种窗口类型、时间窗口、计数窗口和会话窗口,同样支持滚动和滑动类型,这些同样支持动态加载。

 

  • 动态加载检测规则的设计实现

     

        flink流质量检测系统可动态加载检测规则的关键,是这些检测规则是使用算子实现,并每条检测规则内维护一个内存数据结构,存储了规则检测字段或表级别规则的参数变量列表。用户配置完检测规则启动后,flink流计算引擎开始执行,当用户再这topic(以kafka为例)配置新增规则或变更规则后,再会往meta_topic(本系统特有的配置流主题)以特殊字符串形式打条消息。相应的检测规则识别到这条配置流消息,就初始化到其内存数据结构,那么相应的检测规则就会立刻生效。检测到异常记录写入Sink。

 

 

检测规则说明:             

  • 检测规则:

            用API实现检测规则算子,每个算子内部维护一个基于内存的数据结构

 

  • 启动程序:

            每次启动初始化每条规则的内存数据结构

 

  • 检测结果写入Sink:

            写入到MySql的Sink

 

  • 检测配置流:

            用户新加、更新或取消都会往meta_topic发送一条配置流消息,meta_topic是流质量检测系统用户配置流主题,为了实现动态加载规则使用。

 

  • 内存数据结构:

            存放每条规则的参数信息,识别到检测配置流信息会动态更新内存数据结构,达到动态更新规则参数目的。参数个数和类型因规则而异的参数列表,同一检测规则内可能有多个字段的检测。


 

总结

 

        流质量检测系统从有效性、唯一性、完整性、准确性、时效性和自定义规则大类实现的多种检测规则,并实现了动态加载规则功能,且支持多种窗口类型选择和参数动态更新,多级告警通知,多维度异常统计信息,数据owner清晰定位等等功能。

 

        大部分检测规则都可以抽象出通用规则,因自定义规则因是用户自定义SQL规则,所使用表及逻辑实现是无法提前获知的,自定义规则暂时还不支持动态加载。

 

        由于笔者知识及水平有限,因此文中错漏之处在所难免,恳请各位老师、专家不吝赐教。


 

来源:BigDataplus

 作者:后羿BigDataplus

 原文链接:https://mp.weixin.qq.com/s/jg-jABVqzyodcg0Hi1gx4g

上一篇:数据治理的成功要素1:数据战略管理

下一篇:数据治理系列:一个数据质量监控系统的自我修养

为什么选择龙石数据?