Storm簡介
storm是用來做實時計算的框架墩新,所以介紹storm之前需要知道什么是流式計算。
流式計算:數(shù)據(jù)實時產(chǎn)生窟坐、數(shù)據(jù)實時傳輸海渊、數(shù)據(jù)實時計算、實時展示
代表技術:Flume實時獲取數(shù)據(jù)哲鸳、Kafka/metaq實時數(shù)據(jù)存儲臣疑、Storm/JStorm實時數(shù)據(jù)計算、Redis實時結果緩存徙菠、持久化存儲(mysql)讯沈。一句話總結:將源源不斷產(chǎn)生的數(shù)據(jù)實時收集并實時計算,盡可能快的得到計算結果婿奔。
而Storm用來實時處理數(shù)據(jù)缺狠,特點:低延遲、高可用萍摊、分布式挤茄、可擴展、數(shù)據(jù)不丟失冰木。提供簡單容易理解的接口穷劈,便于開發(fā)笼恰。
Storm與Hadoop的區(qū)別
Storm用于實時計算,Hadoop用于離線計算歇终。
Storm處理的數(shù)據(jù)保存在內存中社证,源源不斷;Hadoop處理的數(shù)據(jù)保存在文件系統(tǒng)中评凝,一批一批追葡。
Storm的數(shù)據(jù)通過網(wǎng)絡傳輸進來;Hadoop的數(shù)據(jù)保存在磁盤中奕短。
Storm與Hadoop的編程模型相似
Storm編程模型
流程分析:
1辽俗、storm組件由spout和bolt組成,spout組件(取源數(shù)據(jù)流的組件)首先從外部獲取數(shù)據(jù)篡诽;
2崖飘、接著spout會將數(shù)據(jù)處理后以tuple為單位發(fā)射給后續(xù)bolt組件(該組件接收數(shù)據(jù)后進行邏輯處理),至于如何分發(fā)有多種規(guī)則可選杈女,比如隨機發(fā)或者按照指定字段發(fā)(類似于hadoop中默認的哈希值比上mapreduce朱浴,這種情況可以保證相同的字段必發(fā)射到某個bolt)。
3达椰、處理邏輯1的bolt組件處理完數(shù)據(jù)后翰蠢,會接著往后續(xù)處理邏輯2的bolt組件發(fā)射數(shù)據(jù)。
4啰劲、經(jīng)過幾個bolt組件處理后梁沧,達到要求,將數(shù)據(jù)保存起來蝇裤,比如發(fā)到redis中廷支。
注:如圖所示,兩個處理邏輯1 的bolt都接來自spout的數(shù)據(jù)栓辜,但兩者的處理邏輯是相同的(兩個線程做同樣的事情)恋拍,那么認為該bolt的并發(fā)度為
Topology:Storm中運行的一個實時應用程序的名稱。(拓撲)
storm核心組件
組件介紹
1藕甩、Nimbus:用來進行資源分配和任務調度的施敢,對任務進行監(jiān)控;
2狭莱、zookeeper:協(xié)調服務僵娃,保存任務分配的信息、心跳信息腋妙、元數(shù)據(jù)信息默怨;
3、Supervisor:一個Supervisor對應一個物理機辉阶,它是當前機器上的管理者先壕,介紹Nimbus分配的任務,按需來啟動自己的Worker谆甜,而Workder的數(shù)量是能通過配置文件來配置的(配置端口即可垃僚,將集群搭建的時候會說到);
4规辱、Worker:執(zhí)行具體的任務的組件谆棺,其中任務類型有兩種,一種是Spout任務罕袋,另一種是Bolt任務改淑,一個Worker中可能有多個Spout任務和Bolt任務;
5浴讯、Task:worker中每一個spout/bolt的線程稱為一個task朵夏。每個Task屬于某個組件并發(fā)度中的一個,一個Task本質上是一個線程榆纽。
默認情況下Task=executor=thread
流式計算架構
flume實時采集仰猖,用來獲取數(shù)據(jù),低延遲奈籽。
Kafka消息隊列饥侵,用來臨時保存數(shù)據(jù),低延遲衣屏。
Strom實時計算躏升,用來計算數(shù)據(jù),低延遲狼忱。
Redis實時存儲膨疏,是個內存數(shù)據(jù)庫,用來保存數(shù)據(jù)钻弄,低延遲成肘。
網(wǎng)站產(chǎn)生日志后,通過Flume來獲取日志斧蜕,接著將日志信息保存到Kafka中双霍,Kafka將數(shù)據(jù)發(fā)送到Storm集群,Strom集群根據(jù)需求來進行計算批销,將結果保存到redis中洒闸。