成都地铁COCC项目是由成都地铁运营有限公司主导,由亿雅捷深度参与建设的一个线网级综合监控运营平台。该平台监控范围涉及地铁运营的所有主要业务指标,包括:行车、客运、设备、能耗等。
其中,客运指标数据来自于ACC系统产生的清分数据,以文件形式实时地发送至COCC数据接口服务器。ACC系统每天会产生大量的数据文件,最大的单体文件尺寸达到数百兆字节。为了满足实时监控的需求,COCC系统除了要对这些数据进行接收外,还要对这些数据进行实时的计算、处理,以得到准确的预测及预警数据。
在面对如此大数据量的实时处理任务时,传统的单机程序已很难保证数据处理的及时性和准确性。我们采用了在大数据处理领域常用的处理方法,采用分布式的架构来对ACC客运数据进行实时的流式处理。
一、分布式架构保障系统稳定
如上图所示,我们的系统采用分布式架构。Zookeeper集群为Kafka及Storm这种分布式程序提供协调及同步服务。Kafka集群在本系统内充当数据缓冲的作用,在被Storm处理之前,数据先缓存在Kafka集群内。Storm集群是一个实时数据处理框架,它以一种类似于管道的方式处理数据,同时可以让程序开发人员无需考虑底层的分布式实现细节,即可轻松拥有强大的分布式处理能力。
当系统处理效率下降时,只需简单地通过修改启动参数、增加集群节点数等方式,来使系统处理能力得到线性提升。同时,因为我们的数据处理任务是运行在Storm集群之上,当集群中任何一个节点出现故障宕机时,未处理完的数据会自动转到其它节点继续处理,而不会导致数据丢失或延迟。
二、Storm流式处理框架保障数据被及时处理
Storm采用类似“管道”的方式来处理数据,这种方式也被称为“流式数据处理”。如上图所示,每一个拓扑任务,都像一个大树,树根是拓扑的源头,它负责从Kafka接收数据,并进行一些预处理,然后向下游节点分发。下游节点接收到上游分发的数据后,继续对数据进行处理,处理完成后,将处理存入数据库。