赞
踩
在电力行业项目甚至大多数工业项目中,都会涉及到对传感器等设备的采集数据进行存储和处理这一典型的业务场景,具体流程为:
如图所示:
根据采集数据接入和处理这一典型的业务场景,我们针对每个环节列举了一些常用的技术。
由于实际情况下,可能存在多个数据源,所以需要使用消息队列对实时数据进行汇总,这样可以实现数据生产与消费之间的解耦。除了解耦外,消息队列还提供了流量削峰的功能,以防止异常的流量过大导致下游处理程序崩溃。
常见的消息队列如下:
实时处理传统的方式是使用Java程序,当数据量较大的时候可以考虑使用流处理框架。常见的实时处理方式如下:
对于大量采集数据的写入,使用关系型数据库性能肯定是达不到要求的。可以考虑使用分布式数据库或分布式文件系统。常用的持久化存储如下:
除了可以用普通Java程序进行离线处理,还可以使用批处理方式的数据处理框架进行处理,常用的数据处理方式如下:
对数据进行在线分析需要提供SQL或类SQL接口。常用的在线分析工具如下:
列举了每个环节的可选的技术之后,我们来结合两个具体案例浅谈一下在这种典型业务场景下的技术选型。
这个实例是某配用电系统中设备采集数据处理部分,主要采用Java程序的方式来进行数据处理。结构图如下:
将采集上来的数据存入消息队列中,经过不同的处理程序处理过后存入持久化存储并提供给上层调用。
由于实际情况下,可能存在多个数据源,所以需要使用消息队列对实时数据进行汇总,这样可以实现数据生产与消费之间的解耦。除了解耦外,消息队列还提供了流量削峰的功能,以防止异常的流量过大导致下游处理程序崩溃。
常见的消息队列如下:
由于设备的实时数据量非常大,对消息队列的吞吐率和读写速度有着较高要求。Kafka虽然没有实现JMS规范,但是在吞吐率和读写速度方面“吊打”其他MQ,所以本次测试中选用Kafka作为实时数据传输的消息队列。
在工业项目中,实时数据库被大量应用与传感器等设备的采集数据的存储,比较著名的实时数据库有OSIsoft公司的PI ,Wonderware公司的Industrial SQL等,不过价格都较为昂贵。基于成本和性能的综合考量,我们使用了国内的实时数据库庚顿(Golden)。
在项目中需要将实时数据定时进行计算和统计,提供给上层业务进行查询。统计数据我们选择了用MySQL进行存储。
在配用电系统中,采集数据处理模块全部的处理逻辑全部在普通Java程序中实现。下面简述每个处理程序的主要逻辑。
- KafkaToReal
KafkaToReal模块主要将Kafka中的实时数据存入实时数据库中。
- Alamer
拉取Kafka中的数据进行计算,根据特定的告警规则触发告警,并将告警信息写入Kafka和MySQL中。
- DataProcess
定时对实时数据库中的数据进行计算,并将结果存入MySQL中。
- WebSocket
拉取Kafka中的实时数据,并向注册了推送服务的Web页面推送实时数据。
目前这套技术选型已经很好的完成了当前的项目需求,但是从长远的目光看,随着数据量的增长,这套数据处理技术存在一个比较大的问题:难以横向扩展。即随着数据量的增长,不能简单的依靠增加服务器数量的而完成处理能力的增长。这也推动了我们进行下一个例子中的那些大数据技术的研究。
而既然存在难以横向扩展的问题,为什么我们还要选用当前这套技术选型呢?主要原因有二:
在这里也体现了我们进行技术选型时的思路:杀鸡不用牛刀。当单机可以处理的时候,尽量使用单机处理技术。当简单的技术可以实现的时候,尽量不引入复杂技术。
根据以上需求,大数据组提出了使用Apache Kafka、Apache Spark等技术的解决方案,如图所示:
测试的详细细节请参考我的另一篇博客:使用大数据技术处理风电场机组采集数据
同上个例子。
数据处理框架被用来对海量数据进行处理。按照处理数据的方式和时效性,处理框架分为批处理框架和流处理框架,下面简单介绍它们的适用场景:
接下来分别介绍几种常用的数据处理框架
除了批处理框架和流处理框架,还有一种框架即可以进行批处理,也可以进行流处理,它们被称为混合框架。混合框架主要有Spark和Flink。
由于测试中需要同时使用流处理框架(实时告警、分钟均值计算)和批处理框架(小时均值、日均值、月均值),所以优先选择混合处理框架。Flink是新型的处理框架,目前还没有大型企业成功的商用案例,而Spark相比Flink更成熟,社区也更加活跃,所以选用Spark作为实时计算和离线计算的数据处理框架。
HDFS全称为Hadoop Distributed File System(Hadoop分布式文件系统)。HDFS可以部署在廉价的服务器集群上,并且具有可以横向扩展、高容错、高吞吐等特点,非常适合大规模数据集的应用场景。事实上,HDFS是最主流的开源分布式文件存储系统。因为其高吞吐量、支持快速写入的特点,非常适合大量实时数据落地。
在测试过程中,我们分别尝试过HBase、OpenTSDB、Cassandra等数据库,发现落地性能均不理想,最后选择了HDFS。
由Facebook研发并开源。Apache Hive是一个构建在Hadoop基础设施之上的数据仓库,可以使用类SQL语言HQL对HDFS/HBase上的数据进行查询。值得注意的是,Hive本身并不存储数据,数据仍然是存储在HDFS上的,Hive只是将HDFS上的数据以结构化表的形式呈现出来,在此项目中主要用来提供查询所需的元数据。
Presto与Hive一样,同样由Facebook公司研发并开源。使用Hive的元数据,提供类SQL方式查询。因为支持海量数据灵活的查询方式,通常用于即席查询。由于优化了查询引擎,其查询速度通常是Hive的十倍以上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。