如何作流数据分析,Byron Ellis来告诉你...前端
流数据愈来愈多,如各类消息、社交媒体、运行监控、在线服务、物联网等都会产生大量的实时数据,之前的静态数据也随着采集设备的进化和处理需求的提升而成为流式数据,须要采用具备高可用、低延迟和快速水平扩展的系统来进行处理。《实时分析-流数据的分析与可视化技术》一书对此作了较为全面的介绍,由[美]Byron Ellis编著,王晓伟翻译,机械工业出版社出版。算法
流数据的处理与传统数据库有所不一样,要求具备高可用、低延迟和快速水平扩展能力,这带来了特殊的挑战。所幸的是,大量的开源软件已经探索出了很好的方法,尽管还有不少美中不足,但已足以解决大量的流数据处理和分析所遇到的问题。因为运行在大规模的集群之上并且实时性要求高,流数据的事务性是个很是棘手的问题。根据性能要求和应用的特色,能够采用容许丢失数据、至少交付一次、容许重复交付等多种策略,固然也可使用“有且只有一次”的严格事务模型,但这在分布式系统下将带来额外的检查开销,建议经过业务层面去进行处理从而提高数据前端的实时性。数据库
流数据分析架构包括数据采集、数据流程、数据处理、数据存储、数据交付等多个组成部分。要维持流数据平台的持续运行,能够采用ZooKepper对集群进行管理,实现各个节点的信息同步和状态管理。数据采集可使用MQTT、AMQP、JMS等标准消息协议链接,数据采用JSON格式进行编解码,传输过程使用Kafka或Storm来进行快速传输,数据处理使用Spark或Flink会有很好的效果,而传统Hadoop的MapReduce则会遇到启动慢、实时性差的一些问题。Spark是采用“小步快跑”的批处理策略,基于内存的数据管理机制避免了MapReduce的数据反复IO问题,能够大幅度提高性能。Flink则能提供“即时”的数据处理能力,固然,这与传统的不少软件可能并不兼容,因此仍是替代不了Spark,能够结合起来使用。流数据存储能够分为多级,像梯级水库同样进行管理,实时处理的采用内存,热数据采用Redis、MongoDB等,而冷数据和按期抽样数据能够采用传统文件系统和关系数据库存储。在数据处理中,数据存储应该所有采用异步方式,并且尽可能避免调用文件和传统数据库存储系统,以避免影响数据流动,形成延迟、丢失数据。对于日志数据,已经有完整的解决方案,好比ELK(ElasticSearch、Logstash、Kinbana)、Flume等等,并且能够经过容器技术快速安装、部署。如今,流数据处理不再是高端产品和大型互联网公司的专利了,小型队伍照样能够玩得转。不过,要维护一个流系统的长期运行和不断升级,仍是须要一个专业队伍的,成本也是不菲的。架构
流数据的可视化得益于HTML五、WebSocket和Node.JS等技术和平台,已经能够较为轻松地完成,实现实时的数据更新和高动态的可视化效果,开发出之前不可思议的流畅效果,并且能够运行在不少种Web平台和设备之上。Byron Ellis对这些技术的使用作了实用的介绍,但若是使用SuperMap iClient 9D里面的SDK,则能够更为轻松地完成很是炫酷的Web动态效果(已经集成好了,不要说我没告诉你哟)。机器学习
在Spark里面,全部的数据统计分析、回归分析、分类识别乃至机器学习的算法也都是能够在流数据上面使用的,这些能力很是强大。不过,也须要注意到分段统计的这些传统算法在处理持续的流数据方面的局限性,也期待具备更好的“流式数据专用”处理算法。不过,Byron Ellis没有告诉你的是,在SuperMap的系列平台中,iServer、iObject、iDesktop都可以利用Spark的能力对空间和非空间数据进行处理,而后直接发布到Web可视化前端,所具备的流数据处理和分析能力能够说是潜力无限啊!异步