Apache Storm從一端讀取??實(shí)時(shí)數(shù)據(jù)的原始流,并將其傳遞通過(guò)一系列小處理單元,并在另一端輸出處理/有用的信息。
下圖描述了Apache Storm的核心概念。
現(xiàn)在讓我們仔細(xì)看看Apache Storm的組件 -
組件 | 描述 |
---|---|
Tuple | Tuple是Storm中的主要數(shù)據(jù)結(jié)構(gòu)。它是有序元素的列表。默認(rèn)情況下,Tuple支持所有數(shù)據(jù)類型。通常,它被建模為一組逗號(hào)分隔的值,并傳遞到Storm集群。 |
Stream | 流是元組的無(wú)序序列。 |
Spouts | 流的源。通常,Storm從原始數(shù)據(jù)源(如Twitter Streaming API,Apache Kafka隊(duì)列,Kestrel隊(duì)列等)接受輸入數(shù)據(jù)。否則,您可以編寫(xiě)spouts以從數(shù)據(jù)源讀取數(shù)據(jù)。“ISpout”是實(shí)現(xiàn)spouts的核心接口,一些特定的接口是IRichSpout,BaseRichSpout,KafkaSpout等。 |
Bolts | Bolts是邏輯處理單元。Spouts將數(shù)據(jù)傳遞到Bolts和Bolts過(guò)程,并產(chǎn)生新的輸出流。Bolts可以執(zhí)行過(guò)濾,聚合,加入,與數(shù)據(jù)源和數(shù)據(jù)庫(kù)交互的操作。Bolts接收數(shù)據(jù)并發(fā)射到一個(gè)或多個(gè)Bolts。 “IBolt”是實(shí)現(xiàn)Bolts的核心接口。一些常見(jiàn)的接口是IRichBolt,IBasicBolt等。 |
讓我們來(lái)看一個(gè)“Twitter分析”的實(shí)時(shí)示例,看看如何在Apache Storm中建模。下圖描述了結(jié)構(gòu)。
“Twitter分析”的輸入來(lái)自Twitter Streaming API。Spout將使用Twitter Streaming API讀取用戶的tweets,并作為元組流輸出。來(lái)自spout的單個(gè)元組將具有twitter用戶名和單個(gè)tweet作為逗號(hào)分隔值。然后,這個(gè)元組的蒸汽將被轉(zhuǎn)發(fā)到Bolt,并且Bolt將tweet拆分成單個(gè)字,計(jì)算字?jǐn)?shù),并將信息保存到配置的數(shù)據(jù)源。現(xiàn)在,我們可以通過(guò)查詢數(shù)據(jù)源輕松獲得結(jié)果。
Spouts和Bolts連接在一起,形成拓?fù)浣Y(jié)構(gòu)。實(shí)時(shí)應(yīng)用程序邏輯在Storm拓?fù)渲兄付?。?jiǎn)單地說(shuō),拓?fù)涫怯邢驁D,其中頂點(diǎn)是計(jì)算,邊緣是數(shù)據(jù)流。
簡(jiǎn)單拓?fù)鋸膕pouts開(kāi)始。Spouts將數(shù)據(jù)發(fā)射到一個(gè)或多個(gè)Bolts。Bolt表示拓?fù)渲芯哂凶钚√幚磉壿嫷墓?jié)點(diǎn),并且Bolts的輸出可以發(fā)射到另一個(gè)Bolts作為輸入。
Storm保持拓?fù)涫冀K運(yùn)行,直到您終止拓?fù)?。Apache Storm的主要工作是運(yùn)行拓?fù)?,并在給定時(shí)間運(yùn)行任意數(shù)量的拓?fù)洹?/span>
現(xiàn)在你有一個(gè)關(guān)于Spouts和Bolts的基本想法。它們是拓?fù)涞淖钚∵壿媶卧?,并且使用單個(gè)Spout和Bolt陣列構(gòu)建拓?fù)洹?span>應(yīng)以特定順序正確執(zhí)行它們,以使拓?fù)涑晒\(yùn)行。Storm執(zhí)行的每個(gè)Spout和Bolt稱為“任務(wù)”。簡(jiǎn)單來(lái)說(shuō),任務(wù)是Spouts或Bolts的執(zhí)行。在給定時(shí)間,每個(gè)Spout和Bolt可以具有在多個(gè)單獨(dú)的螺紋中運(yùn)行的多個(gè)實(shí)例。
拓?fù)湓诙鄠€(gè)工作節(jié)點(diǎn)上以分布式方式運(yùn)行。Storm將所有工作節(jié)點(diǎn)上的任務(wù)均勻分布。工作節(jié)點(diǎn)的角色是監(jiān)聽(tīng)作業(yè),并在新作業(yè)到達(dá)時(shí)啟動(dòng)或停止進(jìn)程。
數(shù)據(jù)流從Spouts流到Bolts,或從一個(gè)Bolts流到另一個(gè)Bolts。流分組控制元組在拓?fù)渲械穆酚煞绞?,并幫助我們了解拓?fù)渲械脑M流。有四個(gè)內(nèi)置分組,如下所述。
在隨機(jī)分組中,相等數(shù)量的元組隨機(jī)分布在執(zhí)行Bolts的所有工人中。下圖描述了結(jié)構(gòu)。
元組中具有相同值的字段組合在一起,其余的元組保存在外部。然后,具有相同字段值的元組被向前發(fā)送到執(zhí)行Bolts的同一進(jìn)程。例如,如果流由字段“字”分組,則具有相同字符串“Hello”的元組將移動(dòng)到相同的工作者。下圖顯示了字段分組的工作原理。
所有流可以分組并向前到一個(gè)Bolts。此分組將源的所有實(shí)例生成的元組發(fā)送到單個(gè)目標(biāo)實(shí)例(具體來(lái)說(shuō),選擇具有最低ID的工作程序)。
所有分組將每個(gè)元組的單個(gè)副本發(fā)送到接收Bolts的所有實(shí)例。這種分組用于向Bolts發(fā)送信號(hào)。所有分組對(duì)于連接操作都很有用。
更多建議: