Storm是什么
Storm官方網站有段簡介
Storm是一個免費并開源的分布式實時計算系統(tǒng)驹溃。利用Storm可以很容易做到可靠地處理無限的數據流襟士,像Hadoop批量處理大數據一樣理郑,Storm可以實時處理數據。Storm簡單,可以使用任何編程語言。
在Storm之前哑蔫,進行實時處理是非常痛苦的事情: 需要維護一堆消息隊列和消費者,他們構成了非常復雜的圖結構。消費者進程從隊列里取消息闸迷,處理完成后嵌纲,去更新數據庫,或者給其他隊列發(fā)新消息腥沽。
這樣進行實時處理是非常痛苦的逮走。我們主要的時間都花在關注往哪里發(fā)消息,從哪里接收消息今阳,消息如何序列化师溅,真正的業(yè)務邏輯只占了源代碼的一小部分。一個應用程序的邏輯運行在很多worker上盾舌,但這些worker需要各自單獨部署墓臭,還需要部署消息隊列。最大問題是系統(tǒng)很脆弱矿筝,而且不是容錯的:需要自己保證消息隊列和worker進程工作正常起便。
Storm完整地解決了這些問題棚贾。它是為分布式場景而生的窖维,抽象了消息傳遞,會自動地在集群機器上并發(fā)地處理流式計算妙痹,讓你專注于實時處理的業(yè)務邏輯铸史。
Storm的特點
Storm有如下特點:
編程簡單:開發(fā)人員只需要關注應用邏輯,而且跟Hadoop類似怯伊,Storm提供的編程原語也很簡單
高性能琳轿,低延遲:可以應用于廣告搜索引擎這種要求對廣告主的操作進行實時響應的場景。
分布式:可以輕松應對數據量大耿芹,單機搞不定的場景
可擴展: 隨著業(yè)務發(fā)展崭篡,數據量和計算量越來越大,系統(tǒng)可水平擴展
容錯:單個節(jié)點掛了不影響應用
消息不丟失:保證消息處理
不過Storm不是一個完整的解決方案吧秕。使用Storm時你需要關注以下幾點:
如果使用的是自己的消息隊列琉闪,需要加入消息隊列做數據的來源和產出的代碼
需要考慮如何做故障處理:如何記錄消息隊列處理的進度,應對Storm重啟砸彬,掛掉的場景
需要考慮如何做消息的回退:如果某些消息處理一直失敗怎么辦颠毙?
Storm的應用
跟Hadoop不一樣,Storm是沒有包括任何存儲概念的計算系統(tǒng)砂碉。這就讓Storm可以用在多種不同的場景下:非傳統(tǒng)場景下數據動態(tài)到達或者數據存儲在數據庫這樣的存儲系統(tǒng)里(或數據是被實時操控其他設備的控制器(如交易系統(tǒng))所消費)
Storm有很多應用:實時分析蛀蜜,在線機器學習(online machine learning),連續(xù)計算(continuous computation)增蹭,分布式遠程過程調用(RPC)滴某、ETL等。Storm處理速度很快:每個節(jié)點每秒鐘可以處理超過百萬的數據組。它是可擴展(scalable)霎奢,容錯(fault-tolerant)偏瓤,保證你的數據會被處理,并且很容易搭建和操作椰憋。
例如Nathan Marz提供的例子厅克,產生Twitter的趨勢信息。Twitter從海量推文中抽取趨勢信息橙依,并在本地區(qū)域和國家層級進行維護证舟。這意味者一旦一個案例開始出現,Twitter的話題趨勢算法就能實時的鑒別出這個話題窗骑。這個實時的算法就是通過在Storm上連續(xù)分析Twitter數據來實現的女责。