Storm 系列(一)—— Storm和流處理簡介

1、Storm

1.1 簡介

Storm 是一個開源的分佈式實時計算框架,能夠以簡單、可靠的方式進行大數據流的處理。一般用於實時分析,在線機器學習、持續計算、分佈式 RPC、ETL 等場景。Storm 具備如下特色:git

  • 支持水平橫向擴展;
  • 具備高容錯性,經過 ACK 機制每一個消息都不丟失;
  • 處理速度很是快,每一個節點每秒能處理超過一百萬個 tuples ;
  • 易於設置和操做,並能夠與任何編程語言一塊兒使用;
  • 支持本地模式運行,對於開發人員來講很是友好;
  • 支持圖形化管理界面。

1.2 Storm 與 Hadoop對比

Hadoop 採用 MapReduce 處理數據,而 MapReduce 主要是對數據進行批處理,這使得 Hadoop 更適合於海量數據離線處理的場景。而 Strom 的設計目標是對數據進行實時計算,這使得其更適合實時數據分析的場景。github

1.3 Storm 與 Spark Streaming對比

Spark Streaming 並非真正意義上的流處理框架。 Spark Streaming 接收實時輸入的數據流,並將數據拆分爲一系列批次,而後進行微批處理。只不過 Spark Streaming 可以將數據流進行極小粒度的拆分,使得其可以獲得接近於流處理的效果,但其本質上仍是批處理(或微批處理)。數據庫

1.4 Strom 與 Flink對比

storm 和 Flink 都是真正意義上的實時計算框架。其對好比下:編程

storm flink
狀態管理 無狀態 有狀態
窗口支持 對事件窗口支持較弱,緩存整個窗口的全部數據,窗口結束時一塊兒計算 窗口支持較爲完善,自帶一些窗口聚合方法,
而且會自動管理窗口狀態
消息投遞 At Most Once
At Least Once
At Most Once
At Least Once
Exactly Once
容錯方式 ACK 機制:對每一個消息進行全鏈路跟蹤,失敗或者超時時候進行重發 檢查點機制:經過分佈式一致性快照機制,
對數據流和算子狀態進行保存。在發生錯誤時,使系統可以進行回滾。

注 : 對於消息投遞,通常有如下三種方案:緩存

  • At Most Once : 保證每一個消息會被投遞 0 次或者 1 次,在這種機制下消息頗有可能會丟失;
  • At Least Once : 保證了每一個消息會被默認投遞屢次,至少保證有一次被成功接收,信息可能有重複,可是不會丟失;
  • Exactly Once : 每一個消息對於接收者而言正好被接收一次,保證即不會丟失也不會重複。

2、流處理

2.1 靜態數據處理

在流處理以前,數據一般存儲在數據庫或文件系統中,應用程序根據須要查詢或計算數據,這就是傳統的靜態數據處理架構。Hadoop 採用 HDFS 進行數據存儲,採用 MapReduce 進行數據查詢或分析,這就是典型的靜態數據處理架構。架構

2.2 流處理

而流處理則是直接對運動中數據的處理,在接收數據的同時直接計算數據。實際上,在真實世界中的大多數數據都是連續的流,如傳感器數據,網站用戶活動數據,金融交易數據等等 ,全部這些數據都是隨着時間的推移而源源不斷地產生。框架

接收和發送數據流並執行應用程序或分析邏輯的系統稱爲流處理器。流處理器的基本職責是確保數據有效流動,同時具有可擴展性和容錯能力,Storm 和 Flink 就是其表明性的實現。機器學習

流處理帶來了不少優勢:編程語言

  • 能夠當即對數據作出反應:下降了數據的滯後性,使得數據更具備時效性,更能反映對將來的預期;分佈式

  • 能夠處理更大的數據量:直接處理數據流,而且只保留數據中有意義的子集,而後將其傳送到下一個處理單元,經過逐級過濾數據,從而下降實際須要處理的數據量;

  • 更貼近現實的數據模型:在實際的環境中,一切數據都是持續變化的,想要經過歷史數據推斷將來的趨勢,必須保證數據的不斷輸入和模型的持續修正,典型的就是金融市場、股票市場,流處理能更好地處理這些場景下對數據連續性和及時性的需求;

  • 分散和分離基礎設施:流式處理減小了對大型數據庫的需求。每一個流處理程序經過流處理框架維護了本身的數據和狀態,這使其更適合於當下最流行的微服務架構。

參考資料

  1. What is stream processing?
  2. 流計算框架 Flink 與 Storm 的性能對比

更多大數據系列文章能夠參見 GitHub 開源項目大數據入門指南

相關文章
相關標籤/搜索