Storm

storm

  • storm 是個實時的,分佈式以及具備高容錯的計算框架
    storm進程常駐內存
    storm數據不經過磁盤,在內存中處理

官網
架構:

  • Nimbus 主節點
  • Supervisor 從節點
  • Worker 從節點上工作進程

###編程模型:

  • spout + bolt
  • DAG·有向無環圖
    對於Storm實時計算邏輯的封裝
    即,由一系列通過數據流相互關聯的Spout、Bolt所組成的拓撲結構
    生命週期:此拓撲只要啓動就會一直在集羣中運行,直到手動將其kill,否則不會終止
    (區別於MapReduce當中的Job,MR當中的Job在計算執行完成就會終止)

在這裏插入圖片描述
在這裏插入圖片描述

tuple

stream中最小數據組成單元

stream 數據流
  • 從 spout中源源不斷傳遞數據給 bolt, 以及上一個bolt傳遞數據給下一個bolt, 所以形成的這些數據通道即叫做stream
  • stream 聲明時需要給其指定一個id,(默認是default)
  • 實際開發中,多使用單一數據流,此時不需要單獨指定streamid
spout 數據源
  • 拓撲中數據流的來源。一般會從指定外部的數據源讀取元組(Tuple)發送到拓撲(Topology)中
  • 一個Spout可以發送多個數據流(Stream)
  • 可先通過OutputFieldsDeclarer中的declare方法聲明定義的不同數據流,發送數據時通過SpoutOutputCollector中的emit方法指定數據流Id(streamId)參數將數據發送出去
  • Spout中最核心的方法是nextTuple,該方法會被Storm線程不斷調用、主動從數據源拉取數據,再通過emit方法將數據生成元組(Tuple)發送給之後的Bolt計算
bolt 數據流處理組件
  • 拓撲中數據處理均有Bolt完成。對於簡單的任務或者數據流轉換,單個Bolt可以簡單實現;更加複雜場景往往需要多個Bolt分多個步驟完成
  • 一個Bolt可以發送多個數據流(Stream)
  • 可先通過OutputFieldsDeclarer中的declare方法聲明定義的不同數據流,發送數據時通過SpoutOutputCollector中的emit方法指定數據流Id(streamId)參數將數據發送出去
  • Bolt中最核心的方法是execute方法,該方法負責接收到一個元組(Tuple)數據、真正實現核心的業務邏輯
StreamGroup 數據流分組(即數據分發策略)

數據傳輸:

  • zmq
  • Netty

高可靠性

  • 異常處理
  • 消息可靠性保障機制ACK

可維護性

  • StormUI圖形化監控接口

流式處理

流式處理(異步,同步)

異步服務
  • 與客戶端提交數據進行結算,並不會等待數據計算結果

逐條處理
例如:ETL

統計分析

  • 例:計算PV、UV、訪問熱點 以及 某些數據的聚合、加和、平均等
    客戶端提交數據之後,計算完成結果存儲到Redis、HBase、MySQL或者其他MQ當中,
    客戶端並不關心最終結果是多少。在這裏插入圖片描述
實時請求

實時請求應答服務(同步)

  • 客戶端提交數據請求之後,立即取得計算結果並返回給客戶端

Drpc

實時請求處理
在這裏插入圖片描述

storm 和 mapreduce

storm: 進程。線程常駐內存運行,數據不進入磁盤,數據通過網絡傳遞
mapreduce 爲 TB.pb級別數據設計的批處理計算框架
在這裏插入圖片描述

storm 和 spark Streaming
  • storm: 純流式處理
    • 專門爲流式處理設計
    • 數據傳輸模式更爲簡單,很多地方也更高效
    • 並不是不能做批處理。也可以做微批處理,來提高吞吐
  • spark Streaming 微批處理
    • 將rdd做的很小來用小的批處理來接近流失處理
    • 基於內存和DAG可以把處理任務做的很快
      在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章