博舍

文字识别(一) 文字识别的应用场景是什么意思

文字识别(一)

文字识别是计算机视觉研究领域的分支之一,归属于模式识别和人工智能,是计算机科学的重要组成部分,本文将以上图为主要线索,简要阐述在文字识别领域中的各个组成部分(更侧重传统非深度学习端到端方案)。

一,文字识别简介

计算机文字识别,俗称光学字符识别,英文全称是OpticalCharacterRecognition(简称OCR),它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。OCR技术是实现文字高速录入的一项关键技术。

在OCR技术中,印刷体文字识别是开展最早,技术上最为成熟的一个。早在1929年德国科学家Taushek就取得了一项光学字符识别(OpticalCharacterRecognition,简称OCR)的专利131。欧美国家为了将浩如烟海、与日俱增的大量报刊杂志、文件资料和单据报表等文字材料输入计算机进行信息处理,从上世纪50年代就开始了西文OCR技术的研究,以便代替人工键盘输入。经过40多年的不断发展和完善,并随着计算机技术的飞速发展,西文OCR技术现已广泛应用于各个领域,使得大量的文字资料能够快速、方便、省时省力和及时地输入到计算机中,实现了信息处理的“电子化”。

与印刷体西文OCR相比,印刷体汉文OCR技术的研究是在印刷体数字识别和印刷体英文识别的基础上发展起来的,最早可以追溯到上世纪60年代。1966年,BIM公司的Casey和Nagy发表了第一篇关于印刷体汉字识别的论文,在这篇论文中他们利用简单的模板匹配法,识别了1000个印刷体汉字。从上世纪70年代以来,日本学者在汉文OCR方面做了许多研究工作,其中有代表性的系统有1977年东芝综合研究所研制的可以识别2000个单体印刷汉字的识别系统;80年代初期,日本武藏野电气研究所研制的可以识别2300个多体汉字的印刷体汉字识别系统,代表了当时汉字识别的最高水平。此外,日本的三洋、松下、理光和富士等公司也有其研制的印刷体汉字识别系统。这些系统在方法上,大都采用基于K-L数字变换的匹配方案,使用了大量专用硬件,其设备有的相当于小型机甚至大型机,价格极其昂贵,所以并没有得到广泛应用。

与国外相比,我国的印刷体汉字识别研究是从上世纪70年代末起步的,至今己有近三十年的发展历史,大致可以分成如下三个阶段:

1)探索阶段(1979一1985)

在对数字、英文、符号识别研究的基础上,自上世纪70年代末,国内就有少数单位的研究人员对汉字识别方法进行了探索,发表了一些论文,研制了少量模拟识别软件和系统。这个阶段漫长,成果不多,但是却孕育了下一个阶段的丰硕果实。

2)研制阶段(1986~1988)

1986年初到1988年底,这三年是汉字识别技术研究的高潮期,也是印刷体汉字识别技术研究的丰收期。总共有11个单位进行了14次印刷体汉字识别的成果鉴定,这些系统对样张识别能达到高指标:可以识别宋体、仿宋体、黑体、楷体,识别的字数最多可达6763个,字号从3号到5号,识别率高达99.5%以上,识别速度在286微机条件下能够达到10~14字/秒,但对真实文本识别率大大下降,这是由于以上系统对印刷体文字形状变化(如文字模糊、笔划粘连、断笔、黑白不均、纸质质量差、油墨反透等等)的适应性和抗干扰性比较差造成的。但是这三年研制的识别系统为印刷体汉字识别系统的实用化打下了基础,是识别系统从研制到实用化必经的过程。

3)实用阶段(1989一至今)

印刷体汉字识别自1986年掀起高潮以来,清华大学电子工程系、中国科学院计算所智能中心、北京信息工程学院、沈阳自动化研究所等多家单位分别研制并开发出了实用化的印刷体汉字识别系统。尤其是由清华大学电子工程系研制的清华TH一OCR产品和由汉王集团开发的尚书OCR产品,它们始终都处于技术发展的最前沿,并占据着最大的市场份额,代表着印刷体汉字识别技术的发展潮流。目前,印刷体汉字识别技术的研究热点已经从单纯的文字识别转移到了表格的自动识别与录入,图文混排和多语种混排的版面分析、版面理解和版面恢复,名片识别,金融票据识别和古籍识别等内容上。并且出现了许多相关的识别系统,如:紫光文通推出的名片识别系统(e一card)、身份证识别系统(e验通)和“慧视”屏幕文字图像识别系统等等。这些新的识别系统的出现,标志着印刷体汉字识别技术的应用领域得到了广阔的扩展。

国家高技术研究发展“863”计划、国家重点科技攻关计划、国家自然科学基金和军事基础研究基金都对印刷体汉字识别这一研究课题予以极大的重视和大力的支持。目前,印刷体汉字识别和联机手写汉字识别走向实用化,其技术水平和当前世界最高水平并驾齐驱。

这篇文章将对OCR技术进行分类描述,并介绍一些在OCR领域中较常使用的算法,由于个人主要参与的项目实践与印刷体识别较为相关,所以对于其他领域的描述若有不当之处,请大家指正,希望本文的介绍会让大家对OCR的整个流程有一个简要的概念。

二,印刷体文字识别

OCR技术的兴起便是从印刷体识别开始的,印刷体识别的成功为后来手写体的发展奠定了坚实的基础。印刷体识别的主要流程大致分为以下几个部分:图像预处理;版面处理;图像切分;特征提取、匹配及模型训练、匹配;识别后处理。

2.1图像预处理

输入文本经过扫描仪进入计算机后,由于纸张的厚薄、光洁度和印刷质量都会造成文字畸变,产生断笔、粘连和污点等干扰,所以在进行文字识别之前,要对带有噪声的文字图像进行处理。由于这种处理工作是在文字识别之前,所以被称为预处理。预处理一般包括灰度化、二值化,倾斜检测与校正,行、字切分,平滑,规范化等等。

2.1.1灰度化

通过外设采集的图像通常为彩色图像,彩色图像会夹杂一些干扰信息,灰度化处理的主要目的就是滤除这些信息,灰度化的实质其实就是将原本由三维描述的像素点,映射为一维描述的像素点。转换的方式和规则有很多,在这里不详细介绍。

2.1.2二值化

经过灰度处理的彩色图像还需经过二值化处理将文字与背景进一步分离开,所谓二值化,就是将灰度值(或者彩色值)图像信号转化成只有黑(l)和白(0)的二值图像信号。二值化效果的好坏,会直接影响灰度文本图像的识别率。二值化方法大致可以分为局部阈值二值化和整体阈值二值化。目前使用较多的日本学者大津提出的“大津法”

2.1.3倾斜校正

印刷体文本资料大多是由平行于页面边缘的水平(或者垂直)的文本行(或者列)组成的,即倾斜角度为零度。然而在文本页面扫描过程中,不论是手工扫描还是机器扫描,都不可避免地会出现图像倾斜现象。而倾斜的文档图像对后期的字符分割、识别和图像压缩等工作将产生很大影响。为了保证后续处理的正确性,对文本图像进行倾斜检测和校正是十分必要的。

文本图像的倾斜校正分为手动校正和自动校正两种。手动校正,是指识别系统提供某种人机交互手段,实现文本图像的倾斜校正。自动校正,是指由计算机自动分析文本图像的版面特征,估计图像的倾斜角度,并根据倾斜角度对文本图像进行校正。

目前,文本图像的倾斜检测方法有许多种,主要可以划分为以下五类:基于投影图的方法,基于Hough变换的方法,基于交叉相关性的方法,基于Fourier变换的方法和基于最近邻聚类方法。

最简单的基于投影图的方法是将文本图像沿不同方向进行投影。当投影方向和文字行方向一致时,文字行在投影图上的峰值最大,并且投影图存在明显的峰谷,此时的投影方向就是倾斜角度。

Huogh变换也是一种最常用的倾斜检测方法,它是利用Hough变换的特性,将图像中的前景像素映射到极坐标空间,通过统计极坐标空间各点的累加值得到文档图像的倾斜角度。

Fourier变换的方法是利用页面倾角对应于使Fourier空间密度最大的方向角的特性,将文档图像的所有像素点进行Fourier变换。这种方法的计算量非常大,目前很少采用。

基于最近邻聚类方法,取文本图像的某个子区域中字符连通域的中心点作为特征点,利用基线上的点的连续性,计算出对应的文本行的方向角,从而得到整个页面的倾斜角。

2.1.4规范化

规范化操作就是将输入的任意尺寸的文字都处理成统一尺寸的标准文字,以便与己经预先存储在字典中的参考模板相匹配。规范化操作包括1211:位置规范化、大小规范化以及笔划粗细规范化。在本节只讨论位置规范化和大小规范化。

为了消除文字点阵位置上的偏差,需要把整个文字点阵图移动到规定的位置上,这个过程被称为位置规范化。常用的位置规范化操作有两种,一种是基于质心的位置规范化,另一种是基于文字外边框的位置规范化。基于文字外边框的位置规范化需要首先计算文字的外边框,并找出中心,然后把文字中心移动到指定的位置上来。基于质心的位置规范化方法抗干扰能力比基于文字外边框的位置规范化方法要强。

使用基于文字外边框的位置规范化方法对文字进行位置规范化的操作结果,如下图所示。

对不同大小的文字做变换,使之成为同一尺寸大小,这个过程被称为大小规范化。很多已有的多字号印刷体识别系统都是通过大小规范化来识别不同字号的文字。常用的大小规范化操作也有两种,一种是将文字的外边框按比例线性放大或缩小成规定尺寸的文字,另一种是根据水平和垂直两个方向上文字黑像素的分布情况进行大小规范化。

使用根据水平和垂直两个方向上文字黑像素的分布情况方法对文字进行大小规范化操作的效果,如下图所示。

2.1.5图像平滑

文本图像经过平滑处理之后,能够去掉笔划上的孤立白点和笔划外部的孤立黑点,以及笔划边缘的凹凸点,使得笔划边缘变得平滑。一种简单的平滑处理方法如下。采用NxN窗口(N一般为3,如图2-1所示是一个3X3窗口),依次在二值文字点阵中进行扫描,根据窗口中黑白像素的分布情况,使处于窗口中心的被平滑像素X,从“0”变成“1”或者从“l”变成“0”。

该方法是按以下规则对文字轮廓边缘进行平滑的。

规则1如果满足图2-2中(a),(b),(c),(d)四种情况中的任何一种,则中心点应该由“0”变成“l”。

规则2如果满足图2-2中(e),(f),(g),(h)四种情况中的任何一种,则中心点应该由“1”变成“0”。

2.2版面处理

通常版面处理分为三个主要部分,版面分析、版面理解、版面重构。

2.2.1版面分析

将文本图像分割为不同部分,并标定各部分属性,如:文本、图像、表格。目前在版面分析方面的工作核心思想都是基于连通域分析法,后衍生出的基于神经网络的版面分析法等也都是以连通域为基础进行的。连通域是指将图像经过二值化后转为的二值矩阵中任选一个像素点,若包围其的所有像素点中存在相同像素值的像素点则视为两点连通,以此类推,这样的像素点构成的一个集合在图像中所在的区域即一个连通域。根据连通域大小或像素点分布等特征可以将连通域的属性标记出来,用作进一步处理的依据。

2.2.2版面理解

获取文章逻辑结构,包括各区域的逻辑属性、文章的层次关系和阅读顺序。根据版面分析时记载的连通域位置信息,确定连通域归属序列。

2.2.3版面重构

根据版面分析和OCR的结果,重构出包含文字信息和版面信息的电子文档。

2.3图像切分

图像切分大致可以分为两个个主要类别,行(列)切分和字切分。经过切分处理后,才能方便对单个文字进行识别处理。如下图所示。

2.3.1行列切分

由于印刷体文字图像行列间距.、字间距大致相等,且几乎不存在粘连现象,所以可以采用投影法对图像进行切分,得到每列(行)在坐标轴的像素值投影曲线是一个不平滑的曲线,通过高斯平滑后的曲线在每个波谷位置间的区域即为要的一行(列)。

2.3.2字切分

字切分对于不同的文种存在着比较明显的差异,通常意义下,字切分是指将整行或整列文字切分成独立的一个个文字,而实际上根据文种差异,可能还需需要将单个文字进行进一步切分。而因为文种不同,构词法或钩字法也有所不同,所以切分方法的难度差别也是天壤之别。例如将汉字“屋”切分开的难度和将英文“house”切分开的难度差别就很大,因此在识别模式上,也会根据文种特性,设计不同的识别方法。

2.4特征提取与模型训练

在深度学习广泛应用于图像识别领域之前,模板匹配是较为常见的一种识别方式,之后由于神经网络的复苏,基于反馈的神经网络给OCR领域带来了又一春。现在随着计算机硬件算力的提升,利用大批数据训练深度神经网络在图像识别方面取得了傲人的成绩。

2.4.1特征提取及匹配

特征提取是从单个字符图像上提取统计特征或结构特征的过程。所提取的特征的稳定性及有效性,决定了识别的性能。对于统计特征的提取,可利用统计模式识别中的特征提取方法,而对结构特征的提取,应根据具体文字所确定的识别基元确定相应的特征提取方法。在相当长的文字识别的研究过程中,是利用人们的经验知识,指导文字特征的提取。例如边缘特征、变换特征、穿透特征、网格特征、特征点特征、方向线素特征等等。

特征匹配是从已有的特征库中找到与待识别文字相似度最高的文字的过程。当待识别文字提取完特征之后,不管使用的是统计特征,还是结构特征,都需要有一个特征库来进行比对,特征库中应包含欲识别字符集中所有文字的特征。特征匹配的方法有很多,比较常用的有:欧式空间的比对法、松弛比对法、动态程序比对法以及HMM(HiddneMarkovModel)法等等。在神经网络出现之前以及之后很长一段时间,在汉字OCR领域,一直采用的就是这种模板匹配的方法。

2.4.2模型训练

人工神经网络经过一段时间的发展在OCR中主要充当了分类器的作用,网络的输入为文字特征向量,输出是类编码,在识别类型较少且结构区分较为明显的文字识别中,特征向量通常为字符图像像素点的矩阵,这样特征提取相当于是一个黑盒的操作,对于原理的解释有很多,这里不做详细介绍。深度学习已经成功应用于OCR领域,深度学习的发展替代了繁重的特征工程,从大量标记预料中自动学习出图像的特征,其中CNN(卷积神经网络)尤为抢眼,除了省去人工特征提取的流程外,共享权值的方式也减少了权值数量,大幅减少了计算开销,它的两大优势使得CNN在OCR领域表现十分卓越。

2.4.3识别方式

随着用户数量及需求的增加,识别效率也成为OCR工程化的一项重要指标。传统方法,会对服务器性能要求较高,这样使得投入成本较高且不易扩展;在Hadoop出现之后,该问题得到了较好的改善,通过MapReduce编程框架,使得企业需要为之投入的硬件成本大幅减少,对OCR的发展提供了有力的推动作用。

2.5识别后处理

识别后处理主要应用于两个方面分别是版面恢复及识别校正。版面恢复在版面处理章节已经讲过,这里不再赘述。识别校正,主要方式是在识别结果基础上根据语种的语言模型进行,当然在单文种识别中相对容易一些,而在多语种则较为复杂。

三,手写体文字识别

手写体识别较印刷体识别难度较高,而在手写体识别中脱机手写体识别难度又比联机手写体识别高。这也是脱机手写体识别还未成功应用的主要原因。

联机手写体文字识别(on-linehandwrittencharacterrecognition)又被称为实时(或者在线)手写体识别,即:人在书写文字的同时,机器根据所书写文字的笔划、笔顺等特征进行识别。联机手写体文字识别是依靠电磁式或压电式等手写输入板来完成的,当用户使用光笔在输入板上写字的时候,光笔在板上的运动轨迹(板上的坐标)会被转化为一系列的电信号,这些电信号能够串行地输入到计算机中,从这些电信号我们可以比较容易地抽取笔划和笔顺的信息,从而进行文字识别。从上世纪90年代以来,联机手写体文字识别正逐步走向实用。中国的科研工作者推出了多个联机手写体汉字识别系统,国外的一些大公司也开始进入这一市场。这一技术也迎合了PDA(PersonalDigitalAssistant)的发展潮流。

脱机手写体文字识别(off-linehandwrittencharacterrecognition)又被称为离线手写体文字识别:由书写者预先将文字写在纸上,然后通过扫描仪转换成文字图像,再由计算机识别成相应文字。由于每个人书写习惯的不同,所以脱机手写体文字的类型是多种多样的,而且既便同一个人在不同情况下写出来的文字也会有变化,这些都给脱机手写体文字识别带来了巨大的困难。对于脱机手写体文字识别而言,如果对文字的书写不加以任何限制(即自由手写体文字),则识别难度相当大。

对于脱机手写体文字识别处理流程和技术手段大致和印刷体识别相似,但是由于手写体随意性较大,因此对文字图像的行列切分、字切分带来了较大的困难,根据文种不同,切分的方法也有所不同,例如:在手写体蒙古文字中内蒙古大学的研究学者采用了一种基于字符外接多边形的寻找切分点的字切分算法,取得了不错的切分效果。

对于联机手写体识别的处理流程,主要是利用笔划顺序作为序列模型,加上字符结构特征、笔顺方向特征、笔画数量特征作为空间模型,的组合式模型,完成识别任务。

四,应用案例

4.1印刷体识别应用

印刷体识别引用扩展较多,且技术发展较为成熟,无论在识别准确率方面还是在识别效率方面,都达到了较高的标准。

4.1.1车牌识别

车牌识别系统是OCR工业化应用较早而且成功的典型案例,如今从停车场到小区门禁,车牌识别技术已走进生活的各个角落。车牌识别的成功,归结为以下几个原因;

1、识别内容是封闭集合,且集合较小

2、文字字体、大小较为规范

3、文字间距均匀,噪音较少

4.1.2Tesseract

Tesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。然而,HP不久便决定放弃OCR业务,Tesseract也从此尘封。

数年以后,HP意识到,与其将Tesseract束之高阁,不如贡献给开源软件业,让其重焕新生--2005年,Tesseract由美国内华达州信息技术研究所获得,并求诸于Google对Tesseract进行改进、消除Bug、优化工作。

Tesseract目前已作为开源项目发布在GoogleProject,其最新版本3.0已经支持中文OCR,并提供了一个命令行工具。

4.1.3验证码识别

验证码的主要目的是强制人机交互来抵御机器自动化攻击的。验证码作为一种辅助安全手段在Web安全中有着特殊的地位,验证码安全和web应用中的众多漏洞相比似乎微不足道,但是千里之堤毁于蚁穴,有些时候如果能绕过验证码,则可以把手动变为自动,对于Web安全检测有很大的帮助。

全自动区分计算机和人类的图灵测试(英语:CompletelyAutomatedPublicTuringtesttotellComputersandHumansApart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

对于文字识别技术只适用于字符型验证码识别工作,除此之外还需要对不同验证码设计相应的去噪算法等。

4.2手写体识别应用

4.2.1文通笔(联机手写)

笔顺和连笔是影响联机手写汉字识别系统识别率的两个主要因素。前面讲过,解决笔顺问题的方法有二:一是对使用者提出严格的要求,希望他们按“标准”的笔顺、一笔一画地写字。这种要求,实际上很难做到。这是因为,事实上我国还没有统一的笔顺标准或规定;即使有一种标准,每个人的受教育程度和习惯不尽相同,要求做到都按标准笔顺写字,实际上几乎是不可能的。另一种办法是:对于容易出现笔顺不同的每一个汉字,设置若干标准模板。例如“女”字,有的人先写“く”笔,有的人则先写“一”笔,这个字就可能有两种不同的笔顺。在“字典”中可设置两个模板,它们的笔画相同,而笔顺不一样,但都代表“女”字。这样做会使字典的容量大大增加。在集成电路规模还不够大、速度也不够高的年代,这种办法不容易推广应用。

连笔是一个更为困难的问题,实际上也很难解决。人们为了提高书写速度,写字时往往是一笔呵成。要求他们一笔一画、按部就班地书写,也几乎是不可能的。这个问题比笔顺问题更不易处理,这是目前市场上出售的笔式输入装置的识别率尚难进一步提高的主要原因。

近几年投入市场的“文通笔”在解决上述笔顺和连笔的两个问题上做了一些努力,取得了一些成果,并在全国评测中获得较好的评价。取得这些进展的原因,一方面是由于计算机技术的迅速发展,机器资源已经不是制约识别算法的主要矛盾,设计者不必过分担心计算机的容量和速度的问题,可以更大胆地设计一些具有较高的抗干扰能力的算法;另一方面,在识别算法上,文通笔的研制者提出了一种富有创造性的结构法与统计法相结合的新技术,较好地解决了单纯的结构识别方法难以适应手写汉字字形及笔顺变化的问题。下面扼要介绍这种算法的要点。

上面讲过,结构模式识别比较充分地描述被识别对象的结构信息。但是这种方法也有不少缺点:

①模式的描述是基于符号而不是基于数值,抗干扰能力差。

②描述基元关系的语法规则一般需由人工编写,难以利用机器自学习方法获得。

③句法分析较为复杂,运算量大。

针对上述问题,文通笔在汉字字形建模方面做了一些创新性工作,包括:

①在比较严格的概率基础上建立了一种模式统计模型,可用于描述联机手写字形的空间信息,并易于用统计方法进行训练,建立手写汉字的二维模型。

②对隐马可夫模型(HMM)做了改进,提出控制状态转移路径的概念,使模型较适用于联机手写汉字的描述,较好地反映手写汉字的时间信息,还给出了这种模型的路径搜索算法及参数训练方法。

③将上述两种模型结合起来,用于联机手写汉字识别,在很大程度上解决了连笔和笔顺变化对识别系统性能的影响,使系统具有较高的鲁棒性。

采用上述方法研制成功的“文通笔”,在近年两次“863计划”智能机主题专家组组织的评测会上名列前茅。系统可识别6763个简体汉字和5401个繁体汉字,对于书写比较工整的字,识别率在95%~99%之间;书写比较潦草的字也可达到87%~93%,前十位累加识别率仍达98%~99%;采用主流微机的识别速度大于3字/秒,能满足实际应用要求。

4.2.2古籍识别(脱机手写体识别)

目前脱机手写体识别的主要应用方向在于古籍识别,在印刷术发明之前,古人传承书籍的方式主要依靠抄写,在印刷术发明之后,使用人力抄写的书籍数量减少,但信件、奏折类的包含大量手写体文字的载体依然不少。而使用人力来完成这些书信的电子化转储工作十分费力,因此,针对古籍中文字进行识别的科研需求应运而生。

但是,由于古籍在保存中难免会遭到人为或非人为的损坏,导致字迹不清、残损的情况屡见不鲜,加之,手写体自身可能存在的较大差异性,使得古籍文字识别的工作难上加难。因此,对于脱机手写体识别的应用尚未出现未成功的案例。

应用场景

应用场景#

ApacheFlink功能强大,支持开发和运行多种不同种类的应用程序。它的主要特性包括:批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。Flink不仅可以运行在包括YARN、Mesos、Kubernetes在内的多种资源管理框架上,还支持在裸机集群上独立部署。在启用高可用选项的情况下,它不存在单点失效问题。事实证明,Flink已经可以扩展到数千核心,其状态可以达到TB级别,且仍能保持高吞吐、低延迟的特性。世界各地有很多要求严苛的流处理应用都运行在Flink之上。

接下来我们将介绍Flink常见的几类应用并给出相关实例链接。

事件驱动型应用数据分析应用数据管道应用事件驱动型应用#什么是事件驱动型应用?#

事件驱动型应用是一类具有状态的应用,它从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作。

事件驱动型应用是在计算存储分离的传统应用基础上进化而来。在传统架构中,应用需要读写远程事务型数据库。

相反,事件驱动型应用是基于状态化流处理来完成。在该设计中,数据和计算不会分离,应用只需访问本地(内存或磁盘)即可获取数据。系统容错性的实现依赖于定期向远程持久化存储写入checkpoint。下图描述了传统应用和事件驱动型应用架构的区别。

事件驱动型应用的优势?#

事件驱动型应用无须查询远程数据库,本地数据访问使得它具有更高的吞吐和更低的延迟。而由于定期向远程持久化存储的checkpoint工作可以异步、增量式完成,因此对于正常事件处理的影响甚微。事件驱动型应用的优势不仅限于本地数据访问。传统分层架构下,通常多个应用会共享同一个数据库,因而任何对数据库自身的更改(例如:由应用更新或服务扩容导致数据布局发生改变)都需要谨慎协调。反观事件驱动型应用,由于只需考虑自身数据,因此在更改数据表示或服务扩容时所需的协调工作将大大减少。

Flink如何支持事件驱动型应用?#

事件驱动型应用会受制于底层流处理系统对时间和状态的把控能力,Flink诸多优秀特质都是围绕这些方面来设计的。它提供了一系列丰富的状态操作原语,允许以精确一次的一致性语义合并海量规模(TB级别)的状态数据。此外,Flink还支持事件时间和自由度极高的定制化窗口逻辑,而且它内置的ProcessFunction支持细粒度时间控制,方便实现一些高级业务逻辑。同时,Flink还拥有一个复杂事件处理(CEP)类库,可以用来检测数据流中的模式。

Flink中针对事件驱动应用的明星特性当属savepoint。Savepoint是一个一致性的状态映像,它可以用来初始化任意状态兼容的应用。在完成一次savepoint后,即可放心对应用升级或扩容,还可以启动多个版本的应用来完成A/B测试。

典型的事件驱动型应用实例#反欺诈异常检测基于规则的报警业务流程监控(社交网络)Web应用数据分析应用#什么是数据分析应用?#

数据分析任务需要从原始数据中提取有价值的信息和指标。传统的分析方式通常是利用批查询,或将事件记录下来并基于此有限数据集构建应用来完成。为了得到最新数据的分析结果,必须先将它们加入分析数据集并重新执行查询或运行应用,随后将结果写入存储系统或生成报告。

借助一些先进的流处理引擎,还可以实时地进行数据分析。和传统模式下读取有限数据集不同,流式查询或应用会接入实时事件流,并随着事件消费持续产生和更新结果。这些结果数据可能会写入外部数据库系统或以内部状态的形式维护。仪表展示应用可以相应地从外部数据库读取数据或直接查询应用的内部状态。

如下图所示,ApacheFlink同时支持流式及批量分析应用。

流式分析应用的优势?#

和批量分析相比,由于流式分析省掉了周期性的数据导入和查询过程,因此从事件中获取指标的延迟更低。不仅如此,批量查询必须处理那些由定期导入和输入有界性导致的人工数据边界,而流式查询则无须考虑该问题。

另一方面,流式分析会简化应用抽象。批量查询的流水线通常由多个独立部件组成,需要周期性地调度提取数据和执行查询。如此复杂的流水线操作起来并不容易,一旦某个组件出错将会影响流水线的后续步骤。而流式分析应用整体运行在Flink之类的高端流处理系统之上,涵盖了从数据接入到连续结果计算的所有步骤,因此可以依赖底层引擎提供的故障恢复机制。

Flink如何支持数据分析类应用?#

Flink为持续流式分析和批量分析都提供了良好的支持。具体而言,它内置了一个符合ANSI标准的SQL接口,将批、流查询的语义统一起来。无论是在记录事件的静态数据集上还是实时事件流上,相同SQL查询都会得到一致的结果。同时Flink还支持丰富的用户自定义函数,允许在SQL中执行定制化代码。如果还需进一步定制逻辑,可以利用FlinkDataStreamAPI和DataSetAPI进行更低层次的控制。

典型的数据分析应用实例#电信网络质量监控移动应用中的产品更新及实验评估分析消费者技术中的实时数据即席分析大规模图分析数据管道应用#什么是数据管道?#

提取-转换-加载(ETL)是一种在存储系统之间进行数据转换和迁移的常用方法。ETL作业通常会周期性地触发,将数据从事务型数据库拷贝到分析型数据库或数据仓库。

数据管道和ETL作业的用途相似,都可以转换、丰富数据,并将其从某个存储系统移动到另一个。但数据管道是以持续流模式运行,而非周期性触发。因此它支持从一个不断生成数据的源头读取记录,并将它们以低延迟移动到终点。例如:数据管道可以用来监控文件系统目录中的新文件,并将其数据写入事件日志;另一个应用可能会将事件流物化到数据库或增量构建和优化查询索引。

下图描述了周期性ETL作业和持续数据管道的差异。

数据管道的优势?#

和周期性ETL作业相比,持续数据管道可以明显降低将数据移动到目的端的延迟。此外,由于它能够持续消费和发送数据,因此用途更广,支持用例更多。

Flink如何支持数据管道应用?#

很多常见的数据转换和增强操作可以利用Flink的SQL接口(或TableAPI)及用户自定义函数解决。如果数据管道有更高级的需求,可以选择更通用的DataStreamAPI来实现。Flink为多种数据存储系统(如:Kafka、Kinesis、Elasticsearch、JDBC数据库系统等)内置了连接器。同时它还提供了文件系统的连续型数据源及数据汇,可用来监控目录变化和以时间分区的方式写入文件。

典型的数据管道应用实例#电子商务中的实时查询索引构建电子商务中的持续ETL

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇