storm從入門到放棄教程(1)--storm初識

 概述   

    工做中要使用storm,突發奇想,準備開始寫我的博客,也是第一次寫,因此會有不少不足之處,歡迎你們批評指正!!工做使用場景:某電商公司,物流做業發貨完畢後,要實時的更新訂單以及物流信息.javascript

學習環境:

    window10;     idea;     jdk1.8;     storm 1.1.0(如今最新穩定版)html

storm簡介

 注意

     在這個版本( 1.1.0 )中,項目管理包名由" backtype.storm "改成了" org.apache.storm ",因此本版本的拓撲就沒法在 Storm 1.0.0 版本運行, 若是須要向後兼容,能夠經過如下配置:java

client.jartransformer.class: "org.apache.storm.hack.StormShadeTransformer" python

 將以上配置添加到提交了拓撲的服務器配置中,就能夠兼容舊版本了!git

初識

     storm是一個開源免費的分佈式實時計算系統,storm能夠可靠地處理無限的數據流(大數據),能夠實時的處理 Hadoop 所處理的事項。storm有不少優點:github

  1.  它使用很簡單,多種語言都可以使用它,它也有不少使用者;
  2. 它處理數據很是快,基本每秒能夠處理一百萬組單元數據;
  3. 它伸縮性很強,容錯性很好,能夠保證數據一直被處理
  4. 它很容易設置以及操做
  5. 它有不少使用場景:
  • 實時分析
  • 機器算法
  • 持續計算
  • 分佈式遠程服務調用
  • 數據倉庫技術
  • 還有更多功能待挖掘

storm將會集成消息與數據庫技術,storm拓撲在數據流和更復雜的處理流處理中,能夠實現每一個流計算的須要。算法

學習步驟

  • storm基礎知識
  • storm基層工具
  • Trident接口
  • storm  環境搭建署
  • storm 依賴
  • storm 調試
  • storm 外部集成的框架

理解storm

下圖能夠很清楚的理解storm的工做流程:數據庫

     上圖用水管的水流表明程序的數據流, 首先有一個出水口們( Spouts ),程序控制水的流向,流到一個處理節點( Bolt ),就會進行一種處理,繼續控制水流到下一處理節點(Bolt )。apache

storm特性

簡單方便

     storm擁有簡單方便的API,當用storm編程時,開發者能夠很巧妙的處理和轉換元組的數據流,一個元組就是一個有名字的列表中的一個值 ,元組裏面能夠包含任何對象或者類型,當你想用某一個類型的時候,storm能夠很輕鬆爲那個類型序列化。編程

     在storm中僅有三個抽象的概念: spouts(發射器), bolts(閃電),topologies (拓撲)。這三個概念在下一篇博文中,將會詳細介紹。

storm項目中包含了不少簡單的demo,若有興趣的能夠down源碼,學習研究,一塊兒學習進步

可伸縮

     storm拓撲是並行的運行在集羣當中,拓撲不一樣的部分能夠經過調整他們的並行性進行單獨擴展,在storm客戶端經過 rebalance  命令能夠動態調整運行中的拓撲的並行(平衡度),storm與生俱來的並行性意味着它能夠低延遲的處理大吞吐量的消息,經過測試得知,在處理器: 2x Intel E5645@2.4Ghz   ,內存:24G 的服務器環境下,storm能夠完成 每節點一百萬每秒100字節的信息。

高容錯(自救)

     storm有很高的容錯性,當處理任務死亡時,storm將會自動從新啓動他們,若是一個節點服務器死亡時,storm將會自動把處理任務在其餘節點服務器運行。

     storm的守護進程、矢量圖和監測者均被設計爲無狀態模式和快速死亡,因此,當他們死亡時,他們會自動重啓,就像什麼都沒發生過似的,這意味着若是你強制實行 kill -9命令殺死storm進程,也不會影響你的拓撲正常運行。

高可用(零容錯)

     storm能夠保證每一個元組均被正常執行,storm的核心機制之一,就是它能夠追蹤到每個元組關係,這是保證每一個元組不丟失的有效方法。

     storm提供了一個「至少一次」處理的機制,當使用一個隊列系統時,你將使用同一個機制,當他們失敗時,消息就會被從新發送。

     Trident是storm更高級別的抽象語義,它能夠保證消息只被執行一次。

跨語言

     storm能夠在任何編程語言中使用,storm的核心是經過Thrift規範來定義和提交拓撲,Thrift是能夠跨語言調用,因此拓撲也能夠任何編程語言中定義或者提交。

     一樣的, spouts(發射器)和bolts(閃電) 也能夠在任何編程語言中定義或者提交,無虛擬機的spouts(發射器)和bolts(閃電)的輸入/輸出將會基於json的基礎協議進行通信。通信適配器用 Ruby, Python, Javascript, Perl 這些語言的協議進行了實現。

集羣易搭建

     storm只須要不多的配置和設置就能夠運行起來,storm生產配置開箱即用,EC2能夠一鍵發佈、配置storm項目集羣。另外,storm發佈的時候操做很簡單,storm的設計很強壯,集羣能夠日復一日的運行下去。

免費開源

        storm基於 Apache License, Version 2.0   開源

相關文章
相關標籤/搜索