問題描述html
電子商務門戶但願構建一個實時分析儀表盤,對每分鐘發貨的訂單數量作到可視化,從而優化物流的效率。node
解決方案web
解決方案以前,先快速看看咱們將使用的工具:shell
Apache Spark – 一個通用的大規模數據快速處理引擎。Spark的批處理速度比Hadoop MapReduce快近10倍,而內存中的數據分析速度則快近100倍。更多關於Apache Spark的信息。編程
Python – Python是一種普遍使用的高級,通用,解釋,動態編程語言。 更多關於Python的信息。瀏覽器
Kafka – 一個高吞吐量,分佈式消息發佈訂閱系統。 更多關於Kafka的信息。服務器
Node.js – 基於事件驅動的I/O服務器端JavaScript環境,運行在V8引擎上。 更多關於Node.js的信息。架構
Socket.io – Socket.IO是一個構建實時Web應用程序的JavaScript庫。它支持Web客戶端和服務器之間的實時、雙向通訊。socket
Highcharts – 網頁上交互式JavaScript圖表。 更多關於Highcharts的信息。jsp
CloudxLab – 提供一個真實的基於雲的環境,用於練習和學習各類工具。你能夠經過在線註冊當即開始練習。
如何構建數據Pipeline?
下面是數據Pipeline高層架構圖
咱們的實時分析Dashboard將以下所示
\
讓咱們從數據Pipeline中的每一個階段的描述開始,並完成解決方案的構建。
階段1
當客戶購買系統中的物品或訂單管理系統中的訂單狀態變化時,相應的訂單ID以及訂單狀態和時間將被推送到相應的Kafka主題中。
數據集
因爲沒有真實的在線電子商務門戶網站,咱們準備用CSV文件的數據集來模擬。讓咱們看看數據集:
數據集包含三列分別是:「DateTime」、「OrderId」和「Status」。數據集中的每一行表示特定時間時訂單的狀態。這裏咱們用「xxxxx-xxx」表明訂單ID。咱們只對每分鐘發貨的訂單數感興趣,因此不須要實際的訂單ID。
能夠從CloudxLab GitHub倉庫克隆完整的解決方案的源代碼和數據集。
數據集位於項目的spark-streaming/data/order_data文件夾中。
推送數據集到Kafka
shell腳本將從這些CSV文件中分別獲取每一行並推送到Kafka。推送完一個CSV文件到Kafka以後,須要等待1分鐘再推送下一個CSV文件,這樣能夠模擬實時電子商務門戶環境,這個環境中的訂單狀態是以不一樣的時間間隔更新的。在現實世界的狀況下,當訂單狀態改變時,相應的訂單詳細信息會被推送到Kafka。
運行咱們的shell腳本將數據推送到Kafka主題中。登陸到CloudxLab Web控制檯並運行如下命令。
階段2
在第1階段後,Kafka「order-data」主題中的每一個消息都將以下所示
階段3
Spark streaming代碼將在60秒的時間窗口中從「order-data」的Kafka主題獲取數據並處理,這樣就能在該60秒時間窗口中爲每種狀態的訂單計數。處理後,每種狀態訂單的總計數被推送到「order-one-min-data」的Kafka主題中。
請在Web控制檯中運行這些Spark streaming代碼
階段4
在這個階段,Kafka主題「order-one-min-data」中的每一個消息都將相似於如下JSON字符串
階段5
運行Node.js server
如今咱們將運行一個node.js服務器來使用「order-one-min-data」Kafka主題的消息,並將其推送到Web瀏覽器,這樣就能夠在Web瀏覽器中顯示出每分鐘發貨的訂單數量。
請在Web控制檯中運行如下命令以啓動node.js服務器
如今node服務器將運行在端口3001上。若是在啓動node服務器時出現「EADDRINUSE」錯誤,請編輯index.js文件並將端口依次更改成3002…3003…3004等。請使用3001-3010範圍內的任意可用端口來運行node服務器。
用瀏覽器訪問
啓動node服務器後,請轉到http://YOUR_WEB_CONSOLE:PORT_NUMBER訪問實時分析Dashboard。若是您的Web控制檯是f.cloudxlab.com,而且node服務器正在端口3002上運行,請轉到http://f.cloudxlab.com:3002訪問Dashboard。
當咱們訪問上面的URL時,socket.io-client庫被加載到瀏覽器,它會開啓服務器和瀏覽器之間的雙向通訊信道。
階段6
一旦在Kafka的「order-one-min-data」主題中有新消息到達,node進程就會消費它。消費的消息將經過socket.io發送給Web瀏覽器。
階段7
一旦web瀏覽器中的socket.io-client接收到一個新的「message」事件,事件中的數據將會被處理。若是接收的數據中的訂單狀態是「shipped」,它將會被添加到HighCharts座標系上並顯示在瀏覽器中。
咱們還錄製了一個關於如何運行上述全部的命令並構建實時分析Dashboard的視頻。
咱們已成功構建實時分析Dashboard。這是一個基本示例,演示如何集成Spark-streaming,Kafka,node.js和socket.io來構建實時分析Dashboard。如今,因爲有了這些基礎知識,咱們就可使用上述工具構建更復雜的系統。
截止時間:2016年11月30日
更多大數據與分析相關行業資訊、解決方案、案例、教程等請點擊查看>>>
詳情請諮詢在線客服!
客服熱線:023-66090381