如何作流數據分析,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可視化前端,所具備的流數據處理和分析能力能夠說是潛力無限啊!異步