基于Storm的城市智慧交通大数据处理系统的构建
2019-12-13张淑梅李福兴
张淑梅 李福兴
摘要:针对城市交通产生大量的实时、连续数据处理的问题,提出采用Storm分布式实时计算框架解决该问题。系统采用Kafka软件实时采集生产现场各类大量参数、发布-订阅消息,经Storm的Trident应用软件组件对大数据进行过滤、拆分、分组、函数、状态更新、状态查询、重新分区等操作完成大数据计算;结合分布式远程过程调用软件(DRPC软件)满足并行查询需求。经验证,该设计可提高原系统计算速度、效率和吞吐量,降低开销,确保数据安全。
关键词:城市交通;大数据;分布式
中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2019)09-0126-03
0 引言
随着各种交通信息采集技术例如传感器技术、地理信息系统、GPS采集系统和计算机技术被广泛地运用到城市交通路口,采集得到的交通数据呈爆发增长。经研究和分析发现,这些数据无论是类型、格式、长度各不相同,可分为结构化、非结构化及半结构化。本系统是建立在城市智慧交通物联网、云计算平台基础上,构建基于分布式流式实时数据计算技术,建立城市智慧交通大数据计算系统。提高城市智慧交通系统响应速度,辅助城市交通智慧决策。
1 实时数据流式计算相关技术
1.1 常见大数据实时流式处理架构
在大数据实时流式处理领域,主流开源实时流式处理系统有Storm、Spark和Flink 3种。Storm工作时需要将任务设计为有向无环拓扑图,将设计好的有向无环拓扑图提交至系统集群,由系统集群主控节点分配任务给相应的工作节点执行任务。Spark是在处理前按时间戳预先将大数据分割为微批量数据流后进行批处理作业。Flink数据处理模式与Storm类似,但具有完善的窗口功能及窗口聚合等功能,并且会主动操作窗口状态。为了及时掌握数据处理结果,流式处理系统都有数据处理状态管理功能,但这3种系统的状态管理模式不同,Storm将状态管理滚动至应用层面或使用更高层面的抽象Trident[1]。Spark把状态信息视作是一种微批量数据流,在处理数据时加载数据目前的状态信息,该状态信息通过利用Spark具有的函数操作获得该数据处理结果,同时修改被加载过数据的状态信息。Flink系统设有专门的数据状态信息,Flink在内部存储计算产生的中间结果,并供后续功能或算子计算结果使用。数据状态信息可存在Flink堆内存或堆外内存,也可存储介质在第三方介质中。
1.2 storm架构
Storm架构适用于处理无边界的流式数据,其架构依赖Hadoop的Zookeeper。Storm系统将接收的数据直接在内存中进行计算,没有数据传输和磁盘读写的延迟问题,满足分布式流式实时计算对实时性要求高的需求。
Storm采用主从架构模式,其系统有主节点(Master)和工作节点( worker)之分。主节点为系统的中心,在其上运行后台服务程序(Nimbus)、运行各种Storm命令,包括激活(active) 、使失效(Deactive)、再次平衡(rebalance)以及终止(kill)命令。工作节点(worker)上运行服务程序(Supervisor),工作节点也是Spout和Bolt执行处理逻辑的地方,通过Supervisor程序安排工作任务、下载作业副本。Supervisor监听执行后台服务程序提交的任务,并可对任务线程执行启动、暂停和撤销工作。一个或多个工作线程组成一个工作进程,工作线程由每个任务节点的实例组成,是Storm的最小单元。
Storm通过Zookeeper程序协调主节点和工作结点之间的通信。任何在主结点和工作结点之间的状态都存放在Zookeeper里。一旦其中一個任务崩溃了,当恢复的时候,将从Zookeeper中读取该任务之前的状态,让Storm结点任务恢复还原至崩溃以前的状态。
1.3 Kafka消息系统
Kafka是一个分布式高吞吐量消息系统[2],它拥有高吞吐量、易扩展和透明的特点,非常适合处理为实现规模化、智能化、集群化生产而组成的物联网大数据。
Kafka消息可靠性机制。当一个消息被发送后,发送端将等候服务器成功接收到消息的反馈(可通过参数控制等候时间),假如消息在传输途中丢失或是其中某个服务器死机,发送端则重新发送。服务器端记录了补偿值(offset),用于指向接收端下一个即将发送的信息,当接收端收到了消息,但却在计算过程中宕机,此时接收端可以通过这个补偿值重新找到上一个消息再进行处理。接收端还有权限控制这个补偿值,对持久化到服务器端的消息做任意处理,提高了消息发送可靠性,降低数据丢失率。Kafka的数据转发方案具有允许集群中的某一节点死机而不影响整个集群工作的特点,即在一个集群中,当备份数量为N下,并允许N-1个节点失败。在所有这些节点中,其中有一个节点是头节点,该节点存储了其它备份节点列表,并维持各个备份间的状体同步。基于Kafka的特点,本次选用Kafka程序。
2 城市智慧交通大数据处理需求分析
智能交通云平台主要包含以下几个方面:(1)基于大数据处理技术的交通信息数据共享中心,能够对海量数据进行有效存储和管理的城市智慧交通数据系统。(2)为方便公众出行,对于出现大面积交通瘫痪的情况进行预测、避免拥堵的城市交通监测和预警系统。(3)可按时段和区域统计车辆污染的排放情况,为改善环境、促进绿色环保以及治理汽车尾气的排放提供数据支持的交通污染监测系统。(4)可对交通数据进行分析,让公交部门充分了解道路情况,适时调整公交运力,合理分配公交资源,方便公众出行的公交管理系统。(5)城市智慧交通系统除人车路外,其智慧网络主要由物联网和其它设备组成,其中物联网是系统的中枢神经系统。在过程中实时产生的大数据连续、数量相对比较大的特点,传统的数据处理系统无法满足这一需求,需要构建一套能实现实时数据分布式流式处理系统。
3 实时数据计算系统设计
3.1 系统架构设计
根据Storm系统的特点,系统采用结构化设计模式,其主要由实时数据采集、实时数据计算、数据存储、实时数据分享和实时系统监控部分组成。(1)实时数据采集层可以根据数据来源、类型、大小、频率进行预装软件,如Kafka软件和Nginx软件实现对这些数据的实时采集和预处理,其中Nginx软件安装在一台服务器上,它将获取的数据按照要求(如地点、时间等)进行日志分割并生成一定格式的日志文件,它是流式数据处理平台数据的入口和预处理系统。(2)实时数据计算层是基于Storm 实时流式计算技术的高可靠大数据实时计算系统,实现对海量大数据的分布式、高容错、高可靠实时的大数据进行计算,是整个Storm系统的核心部分。系统应用Storm系列组件进行任务拓扑设计、系统开发、进程编排、信息发布等。(3)数据存储层是系统用于城市智慧交通运行过程中产生的各类数据存储管理部分。在大数据分布式实时流式计算系统中,为了提高系统存取数据的速度,数据存储根据数据应用背景分为内存存储和硬盘存储两种模式。本次系统内存储选Redis系统,磁盘存储选用Hbase数据库管理系统。(4)实时数据分享层是实时数据计算系统将大数据处理的结果对其它应用系统分享的接口。本系统基于高效的实时数据存储子系统,采用统一的Web服务、远程服务等服务方式为外部系统提供实时数据访问接口。(5)实时数据处理监控实现对系统各部分的软件和硬件运行状态进行实时监控。实现对每个节点上的CPU、存储(内外存)、网络带宽等参数进行实时监测;完成对系统接入部分的实时数据传输情况的实时监测;控制系统各计算节点计算任务均衡分配、计算任务的启停等;可以对实时数据计算子系统和实时数据分析子系统等的数据存取和访问进行实时监测,还能根据预先定义的报警规则发出状态报警和预警。
3.2 城市智慧交通大数据处理
3.2.1 数据实时计算设计
数据实时计算是Storm系统的核心。Storm通过转发数据功能,按类别聚类建立拓扑,不断接受现场的数据,Storm通过主节点按事先设定的工作(worker)分配任务(Task),Spout和Bolt则按类处理大数据。
Spout接受传输层数据的输入或从文件中读入数据、监视新文件,文件一旦被修改,Spout会重新读入数据并覆盖之前的元组(tuple),是数据实时计算数据的入口,将接受的数据组成tuple(元组),将tuple发射给Bolt进行数据实时执行流式数据合并、连接、分组、聚合等操作,将操作结果再发送至下一个Bolt,直至数据处理完毕,实现城市智慧交通实时监控。
为了更进一步提升系统处理大数据的能力,在完成了将数据传输至kafka后,系统选用Trident topology进行分析计算,Trident是在storm基礎上,一个以实时流式计算为目标的高度抽象。它在提供处理大吞吐量数据能力的同时,具有高速分布式查询和有状态流式处理的能力。
3.2.2 建立一个Trident的spout
数据采集层完成接收系统实时数据,具体设计如下:创建一个新的数据流,名命为cm-spout,并且传参数给kakfk的spout实例。将Trident topology转换成一个storm的拓扑。分别指定cmhosts和kafka的topic(主题)名,cmhost用于配置连接kafka的Zookeeper,这个spout用于通过查询的方式动态确定kafka的分区信息。经过这步已经建立了一个用于发射批量城市智慧交通系统运行的spout。
3.2.3 分割操作及创建每个字段的独立数据流
将数据进行分割为小数据发布到系统集群的计算机中完成计算任务,分割将以时间戳、地点、设备名为关键词进行分割,建立多个主题,用来管理不同时间、地点、设备所产生的数据。不同类别的数据记录到其对应的主题池中,而这些进入到主题池中的数据会被Kafka写入磁盘的日志文件中进行持久化处理,降低Storm对实时分析处理速度的要求,等Storm有空时再处理没来及处理的数据,避免数据处理的遗漏。
3.3 实时报警
在按照数据字段名建立了新的流数据后,设计一个跟踪函数,实现对各数据判断是否在合适的范围内,如果不在合适范围内,则向XMPP发送报警信息和该数据并将该数据做永久保存处理。
3.4 并行查询设计
通过以上设计,系统已可快速高效地处理城市智慧交通生产的大数据,但要通过查询处理数据的结果,还需进一步完成查询的设计。在设计时,将应用软件、查询和Storm隔离,它们之间只能通过外部方式来访问,为了查询拓扑以获取所需的数据,将使用DRPC(分布式远程过程调用)实现。DRPC是Storm中一套软件,它接收用户输入,同时也作为DRPC Spout的输入而存在。
在Storm的DRPC中,客户端将向Storm的DRPC的服务器发出一个DRPC请求,服务器将把请求发送到相应Storm topology来协调请求和计算,并等待该拓扑的应答。一旦收到应答,它将把应答返回到请求客户端,实现并行查询,高效地查询各项参数。
4 实验分析
通过在学校机房选5台PC机组建局网,安装系统进行测试。所选软件为Storm 0.10.0 released、Kafka2.11-0.10.0.1, Zookeeper3.4.9,Hbase1.0.3,Redis-3.2.3,PC机配置为:16G内存,intel 酷睿i7的CPU,1T磁盘。实验部署架构,集群各个节点的配置和功能描述如表1所示。
4.1 系统可靠性测试
实验采用运行数据包模拟每1秒产生1000条数据记录。当数据源快速输出时,计算的数据传输在“no-ack”(无应答)时的丢失率和采用“ack”(有应答)保障机制后的数据传输的丢失率。为确保准确性,采用5次数据的平均值。从表2可以看出,采用ack后,有效降低数据丢失率。
4.2 系統实时计算性能
由表3可知,系统实时计算总量和时间的关系,进而证明该系统具有很好的实时性和抗压性。大数据实时流式分布式计算已在一些工业生产现场、电商平台得到应用并显现出良好的效果,这也从另一方面验证了设计的可行性。
5 结语
本文研究以城市智慧交通系统为对象,在已有系统硬件信息化、智能化建设基础上,使用实时流式数据计算系统的Storm技术,设计了城市智慧交通实时大数据的分析、计算、反馈与预警系统。(1)系统实施后,在城市智慧交通运行过程中,对其各项参数的实时自动采集、连续监测和快速分析,相关人员可以实时获取城市智慧交通运行的信息及预警信息。系统采集到的基础数据可以为后续的大数据分析、处理提供支持。(2)由于涉及到生产实践问题,设计验证仅在学校用模拟数据验证,有待生产现场的验证。(3)本文仅对城市智慧交通系统大数据处理进行了系统构建,还有待更进一步完善、不断改善实施方案、优化系统算法及与应用系统更进一步融合,提高应用系统的运行速度和效率。
参考文献
[1] 王润华,毋建军,侯佳路.分布式实时计算引擎——Storm研究[J].中国科技信息,2015(6):68-69.
[2] 程学旗,靳小龙,王元卓,等.大数据系统和分析技术综述[J].软件学报,2014,25(9):1889-1908.
[3] 朱伟,李纪云,江慧,刘柱云.基于分布式内存数据的数据同步设计与实现[J].现代电子技术,2014(37):77-79+83.
Abstract:To solve the problem of large amount of real-time and continuous data processing in urban traffic, a Storm distributed real-time computing framework is proposed to solve the problem. The system uses Kafka software to collect a large number of parameters and publish-subscribe messages on the production site in real time. Through the Trident application software component of Storm, large data are filtered, split, grouped, functions, status updates, status queries, re-partitioning and other operations to complete large data calculation.and combines distributed remote procedure call software (DRPC software) to meet the needs of parallel query. It has been proved that the design can improve the computing speed, efficiency and throughput of the original system, reduce the overhead and ensure data security.
Key words:urban transportation;Big data;distributed