Twitter 數據實時分析處理工具 Storm


1、簡介

Twitter Storm是一個分布式的、容錯的實時計算系統,它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是由BackType開發的實時處理系統,BackType現在已在Twitter麾下。GitHub上的最新版本是Storm 0.5.2,基本是用Clojure寫的。

Storm為分布式實時計算提供了一組通用原語,可被用於“流處理”之中,實時處理消息並更新數據庫。這是管理隊列及工作者集群的另一種方式。 Storm也可被用於“連續計算”(continuous computation),對數據流做連續查詢,在計算時就將結果以流的形式輸出給用戶。它還可被用於“分布式RPC”,以並行的方式運行昂貴的運算。 

Storm的主工程師Nathan Marz表示:

Storm可以方便地在一個計算機集群中編寫與擴展復雜的實時計算,Storm之於實時處理,就好比 Hadoop之於批處理Storm保證每個消息都會得到處理,而且它很快——在一個小集群中,每秒可以處理數以百萬計的消息。更棒的是你可以使用任意編程語言來做開發。

2、Storm主要特點

  1. 簡單的編程模型。類似於MapReduce降低了並行批處理復雜性,Storm降低了進行實時處理的復雜性
  2. 可以使用各種編程語言。你可以在Storm之上使用各種編程語言。默認支持Clojure、Java、Ruby和Python。要增加對其他語言的支持,只需實現一個簡單的Storm通信協議即可。
  3. 容錯性。Storm會管理工作進程和節點的故障。
  4. 水平擴展。計算是在多個線程、進程和服務器之間並行進行的。
  5. 可靠的消息處理。Storm保證每個消息至少能得到一次完整處理。任務失敗時,它會負責從消息源重試消息。
  6. 快速。系統的設計保證了消息能得到快速的處理,使用ØMQ作為其底層消息隊列。
  7. 本地模式。Storm有一個“本地模式”,可以在處理過程中完全模擬Storm集群。這讓你可以快速進行開發和單元測試。
  8. Storm沒有內建數據存儲層,如果需要持久化,需要一個類似於Cassandra或Riak這樣的外部數據庫。

3、Storm組成部分及常用術語

可以拿Storm和Hadoop組成部分做一個類比:

Storm集群類似於一個Hadoop集群。 只不過你在Hadoop上運行的是“MapReduce job”,而在storm上你運行的是 “topologies ”。 “job”和“topologies ”本身有很大的不同 - 一個關鍵的區別是,MapReduce的工作最終完成會終止,而topologies 處理消息永遠保持(或直到你殺了它)

Strom集群有主要有兩類節點:主節點和工作節點。 主節點上運行的“Nimbus ”守護進程,類似Hadoop的“JobTracker”。 

每個工作節點運行一個叫做”Supervisor”的守護進程 。 Supervisor監聽分配給它的機器,根根據Nimbus 的委派在必要時 啟動和關閉工作進程。

Nimbus  和Supervisors  之間所有的協調工作是通過 一個Zookeeper 集群。 此外,Nimbus的守護進程和 Supervisors  守護進程是無法連接和無狀態的;所有的狀態維持在Zookeeper中 或保存在本地磁盤上。這意味着你可以 kill -9 Nimbus 或Supervisors 進程,所以他們不需要做備份。 這種設計導致storm集群具有令人難以置信的穩定性。

概念說明:

  1. Nimbus:負責資源分配和任務調度。
  2. Supervisor:負責接受nimbus分配的任務,啟動和停止屬於自己管理的worker進程。
  3. Worker:運行具體處理組件邏輯的進程。
  4. Task:worker中每一個spout/bolt的線程稱為一個task. 在storm0.8之后,task不再與物理線程對應,同一個spout/bolt的task可能會共享一個物理線程,該線程稱為executor。
  5. Topology:storm中運行的一個實時應用程序,因為各個組件間的消息流動形成邏輯上的一個拓撲結構。
  6. Spout:在一個topology中產生源數據流的組件。通常情況下spout會從外部數據源中讀取數據,然后轉換為topology內部的源數據。Spout是一個主動的角色,其接口中有個nextTuple()函數,storm框架會不停地調用此函數,用戶只要在其中生成源數據即可。
  7. Bolt:在一個topology中接受數據然后執行處理的組件。Bolt可以執行過濾、函數操作、合並、寫數據庫等任何操作。Bolt是一個被動的角色,其接口中有個execute(Tuple input)函數,在接受到消息后會調用此函數,用戶可以在其中執行自己想要的操作。
  8. Tuple:一次消息傳遞的基本單元。本來應該是一個key-value的map,但是由於各個組件間傳遞的tuple的字段名稱已經事先定義好,所以tuple中只要按序填入各個value就行了,所以就是一個value list.
  9. Stream:源源不斷傳遞的tuple就組成了stream。
  10. stream grouping:即消息的partition方法。Storm中提供若干種實用的grouping方式,包括shuffle, fields hash, all, global, none, direct和localOrShuffle等

 

4、Storm應用場景

Twitter列舉了Storm的三大類應用:

1. 信息流處理{Stream processing}
Storm可用來實時處理新數據和更新數據庫,兼具容錯性和可擴展性。

2. 連續計算{Continuous computation}
Storm可進行連續查詢並把結果即時反饋給客戶端。比如把Twitter上的熱門話題發送到瀏覽器中。

3. 分布式遠程程序調用{Distributed RPC}
Storm可用來並行處理密集查詢。Storm的拓撲結構是一個等待調用信息的分布函數,當它收到一條調用信息后,會對查詢進行計算,並返回查詢結果。舉個例子Distributed RPC可以做並行搜索或者處理大集合的數據。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM