APP下载

外场感知设备的数据采集技术研究

2017-07-06田闯张萍

中国管理信息化 2017年12期

田闯+张萍

[摘 要]企业常常面对大量分布分散的终端设备数据,这些数据在传输到数据处理服务器的过程中,以流数据的方式向上汇聚。为了能够快速处理流数据,本文设计基于Esper的插件化流数据处理框架,以提高工作效率。

[关键词]流数据;Esper;插件化

doi:10.3969/j.issn.1673 - 0194.2017.12.077

[中图分类号]TP391.44;TN929.5 [文献标识码]A [文章编号]1673-0194(2017)12-0-02

1 研究背景

流数据的特点是数据持续到达,且速度快、规模宏大、格式各异。目前,在进行外场感知设备的数据采集处理时,通常要同时对接不同的外场感知设备。由于不同的感知设备其通信协议不同,甚至差别较大,而传统的做法一般都是针对不同的外场感知设备的数据采集,通常进行专门的开发。

本文对外场感知设备的数据采集技术进行了分析与研究,并基于Esper设计实现了一个能够适用于多协议流数据处理平台SCP(Stream Computer Platform)。

2 外场感知数据采集

2.1 流数据

近三十多年来,数据库技术发展迅速且得到了广泛应用。一方面,数据建模形式多样,从层次数据库、网状数据库、关系数据库、对象数据库到关系对象数据库等;另一方面,数据规模也越来越大。传统数据库技术的一个共同点是:数据存储在介质中,可以多次利用;用户提交数据操纵语言(Data Manipulation Language,DML)来获取查询结果。尽管传统数据库获得了较大的成功,但是在20世纪末,一种新的应用模型却对它提出了挑战。一种名为流数据(Streaming Data)的应用模型广泛出现在众多领域,例如金融应用、网络监视、通信数据管理、Web应用、传感器网络数据处理等。

令t表示任一时间戳,at表示在该时间戳到达的数据,流数据可以表示成{…,at-1,at,at+1,…}。区别于传统应用模型,流数据模型具有以下4点共性:①数据实时到达;②数据到达次序独立,不受应用系统所控制;③数据规模宏大且不能预知其最大值;④数据一经处理,除非特意保存,否则不能被再次取出处理,或者再次提取数据。

2.2 外场感知设备数据采集中的关键问题

外场感知数据的数据量大、设备分散、各自同时向上汇聚数据的特点带来了一些采集的特殊问题。本部分分析了感知设备的配置管理问题,对于大量异构数据的汇聚,给出了两步走的分层设计,以解决大并发情况下异构数据的采集。并对采集到的异构数据进行解析,给出了一个可扩展的插件式的处理框架,以解析采集到的异构数据。

2.2.1 流数据的并发传输

外场感知数据由于设备较多,数据汇聚点也较多,且互相之间没有必然联系,各自独立上传,这导致前置机要同时接受多个甚至大量的链接。即便前置机可以处理多个链接,也不能同时将数据进行分类和处理,因为这会导致前置机压力过大,影响数据的时效性和完整性。所以,为了能够同时处理大量来自不同汇聚点的异构数据,本文给出两步走的解决方法。第一步,前置机的功能弱化,只接收同构数据,这能降低前置机的通信复杂性,同时将异构数据的处理放到第二步中。第二步将构建基于Esper的数据汇聚总线,Esper总线将接收前置机的数据,不进行任何处理,只是简单地将不同结构的数据放置到不同的模块队列中。这样,来自外场感知的异构数据就最终被放到了不同的模块队列中,同时可以保证大数据量的实时处理。流数据的并发传输如图1所示。

2.2.2 多规约数据的解析

以往的流数据处理框架通常将数据的解析和传输在一起实现,对于多种外场感知数据需要单独实现一套采集程序,不能很好地进行复用。由于本文使用了Esper总线,将数据分发到不同模块的消息隊列中,所以多规约的数据解析就在各规约数据的模块队列中完成了解析。为了能够对不同规约的数据进行解析,这里只需要实现不同规约对应的解析模块,在程序启动时加载到SCP即可。对于不同的模块队列,分别启动一个或多个消费线程,消费线程调用解析模块,有针对性地将来自不同外场感知设备的数据,解析为同一种统一的格式放入目标队列中,或者单独投递到指定的目的地(文件、数据库、MQ等)。

3 基于Esper的多协议流数据处理平台的设计及实现

在文中关键问题分析的基础上,笔者基于Esper复杂事件处理引擎设计并实现了涵盖异构设备、实时外场感知数据汇聚、大规模并发传输的流数据处理平台SCP。其系统框架如图2所示。主要模块包括:前置机、Esper总线、感知队列、消费解码线程、目标队列、存储系统、配置库、配置文件以及守护进程等。

图2中各个功能模块的说明:

(1)前置机:前置机通过读取配置库中与本前置机相关的配置,从而确定与哪些通信端通信,以及通信的具体方式等。

(2)Esper总线:负责接收以事件形式包装的、来自各个前置机的外场原始数据,并根据事件的类型分发到不同的感知队列中。

(3)感知队列:盛放未经解码的异构数据,每个感知队列盛放一种类型的感知数据。

(4)消费解码线程:消费解码线程使用以插件的形式加载到系统中的解码模块,一种消费线程负责从感知队列中取出数据,调用解码模块进行解码,将统一格式的数据放入目标队列中。

(5)目标队列:对于异构数据,系统将最终提供一个统一的数据格式来存储异构数据,异构数据可能只是目标队列中数据对象的子属性。这样目标队列就可以盛放各种外场感知数据。如果感知数据是完全不同格式的数据,比如有些外场感知数据是文件,有些是图片。感知数据经过消费线程解码后,可以直接跳过目标队列,直接进入存储系统。

(6)存储系统:系统最终存放数据的地方。其可以是文件、数据库、外部消息队列服务等。

(7)配置库:提供系统启动需要的各种配置信息。

(8)配置文件:提供一些适合存放在文件中的配置信息,比如本机IP、端口等用于定位前置机本身的信息。

(9)守护进程:用于在系统出现异常退出等不在正常运行状态时重启SCP。

4 结 语

在能源和交通等领域,企业信息化日益发展,企业常常面对大量分布分散的终端设备数据,这些数据在传输到数据处理服务器的过程中,以流数据的方式向上汇聚。基于流数据的特点,本文为了能够快速处理流数据,设计了基于Esper的插件化流数据处理框架。该框架可以适应不同领域数据格式异构的问题,可以处理多数据源,同时可以向数据处理服务器汇聚数据。

主要参考文献

[1]亓开元,赵卓峰,房俊,等.针对高速数据流的大规模数据实时处理方法[J].计算机学报,2012(3).

[2]孙大为,张广艳,郑纬民.大数据流式计算:关键技术及系统实例[J].软件学报,2014(4).