Apache Storm是一個(gè)分布式、可靠、容錯(cuò)的實(shí)時(shí)流式數(shù)據(jù)處理的系統(tǒng)。在Storm中,先要設(shè)計(jì)一個(gè)用于實(shí)時(shí)計(jì)算的圖狀結(jié)構(gòu),我們稱之為拓?fù)洌╰opology)。這個(gè)拓?fù)鋵?huì)被提交給集群,由集群中的主控節(jié)點(diǎn)(master node)分發(fā)代碼,將任務(wù)分配給工作節(jié)點(diǎn)(worker node)執(zhí)行。一個(gè)拓?fù)渲邪╯pout和bolt兩種角色,其中spout發(fā)送消息,負(fù)責(zé)將數(shù)據(jù)流以tuple元組的形式發(fā)送出去;而bolt則負(fù)責(zé)轉(zhuǎn)換這些數(shù)據(jù)流,在bolt中可以完成計(jì)算、過濾等操作,bolt自身也可以隨機(jī)將數(shù)據(jù)發(fā)送給其他bolt。由spout發(fā)射出的tuple是不可變數(shù)組,對(duì)應(yīng)著固定的鍵值對(duì)。
圖1 Storm系統(tǒng)架構(gòu)

業(yè)務(wù)處理邏輯被封裝進(jìn)Storm中的Topology中。一個(gè)Topology是由一組Spout組件(數(shù)據(jù)源)和Bolt組件(邏輯處理)通過Stream Groupings進(jìn)行連接的有向無環(huán)圖(DAG)。Topology里面的每一個(gè)Component(Spout/Bolt)節(jié)點(diǎn)都是并行運(yùn)行的。在Topology里面,可以指定每個(gè)節(jié)點(diǎn)的并行度,Storm則會(huì)在集群里面分配相應(yīng)的Task來同時(shí)計(jì)算,以增強(qiáng)系統(tǒng)的處理能力。
圖2 Topology

Storm有眾多適用場(chǎng)景:實(shí)時(shí)分析、持續(xù)計(jì)算、分布式ETL等。Storm有如下幾個(gè)特點(diǎn):
適用場(chǎng)景廣泛
易擴(kuò)展,可伸縮性高
保證無數(shù)據(jù)丟失
容錯(cuò)性好
易于構(gòu)建和操控
多語言
Storm作為計(jì)算平臺(tái),在業(yè)務(wù)層為用戶提供了更為易用的業(yè)務(wù)實(shí)現(xiàn)方式:CQL(Continuous Query Language—持續(xù)查詢語言)。CQL具有以下幾個(gè)特點(diǎn):
使用簡(jiǎn)單:CQL語法和標(biāo)準(zhǔn)SQL語法類似,只要具備SQL基礎(chǔ),通過簡(jiǎn)單地學(xué)習(xí),即可快速地進(jìn)行業(yè)務(wù)開發(fā)。
功能豐富:CQL除了包含標(biāo)準(zhǔn)SQL的各類基本表達(dá)式等功能之外,還特別針對(duì)流處理場(chǎng)景增加了窗口、過濾、并發(fā)度設(shè)置等功能。
易于擴(kuò)展:CQL提供了拓展接口,以支持日益復(fù)雜的業(yè)務(wù)場(chǎng)景,用戶可以自定義輸入、輸出、序列化、反序列化等功能來滿足特定的業(yè)務(wù)場(chǎng)景
易于調(diào)試:CQL提供了詳細(xì)的異常碼說明,降低了用戶對(duì)各種錯(cuò)誤的處理難度。