Storm入門教程
1. Storm基礎
Storm
Storm主要特點
Storm基本概念
Storm調度器
Storm配置
Guaranteeing Message Processing(消息處理保障機制)
Daemon Fault Tolerance(守護線程容錯機制)
理解Storm拓撲的並行
Tutorial
Local模式
在生產環境中運行Topologies
Storm
Storm是一個免費開源的分布式實時計算系統。Storm令無邊界的流數據計算變得容易,彌補了Hadoop批處理所不能滿足的實時要求。
Storm常用在實時分析、在線機器學習、持續計算、分布式遠程調用和ETL等場景中。Storm處理速度快,單節點每秒可處理百萬級元組的數據;同時,Storm是可擴展的、有容錯性,容易部署與操作。
Storm已整合現有的消息隊列和數據庫系統。
Storm主要特點
- 簡單的API接口
Storm的API簡單且容易使用。當編寫Storm程序時,處理的是元組組成的流數據,一個元組是一組值的集合。元組包含任何對象類型,當使用自定義數據類型時,只需要簡單的使用storm的序列化器注冊一下即可。
Storm提供了三種抽象的組件,分別是Spouts、Bolts和Topologies。Spouts組件是負責接收或生產處理所需的數據源。通常spout從消息隊列中讀取數據,比如Kestrel、RabbitMQ或是Kafka,也可以從其他地方生產自己需要的數據源,比如調用Twitter streaming API。Spout已經和大部分的消息隊列集成。
Bolts處理接收到的數據流,生產出新的數據流提供給其他組件調用。大部分的計算邏輯都由bolt處理。比如函數處理、過濾器、join、聚集、甚至是數據庫調用等等。
一個Topologie組件就是由多個spout和bolt組成的網絡結構。網絡中的每一個邊線代表一個bolt組件訂閱的數據流,這個數據流可能來至spout組件,也可能來至其他bolt組件。一個Topology組件就是復雜的流處理計算過程。Topology部署在服務器上就會一直運行。
Storm提供了一種本地運行模式,來模擬集群處理,這對開發和測試非常有用。客戶端使用strom命令提交一個Topology到集群上運行。
- 可擴展性
Storm topologies先天並行計算並且運行在集群中。不同的topology的部分能調整它們的並行度,如client可通過“rebalance”命令及時調整正在運行的topologies的並行度。
先天並行計算是指它在低延遲的前提下保證了高吞吐量。如,在單台節點(處理器:2x Intel E5645@2.4Ghz,內存:24GB)上每秒處理百萬級消息,消息約為100字節。
- 容錯性
Storm有容錯機制,當工作節點宕了,storm會嘗試重啟。如果節點宕機,會重啟另啟動一個節點。
Storm的守護進程Nimbus和Supervisors都是無狀態的,如果它們死掉,那么它們將會重啟就像什么也沒發生。也就就是說,即使你用kill -9強制殺死這兩個進程那么也不會影響集群的正常運行。
- 無數據丟失
Storm確保每個元組被處理。Storm的機制之一:能有效地記錄元組的lineage。
Storm的抽象組件確保了數據至少處理一次,即使使用消息隊列系統失敗時,也能確保消息被處理。
通過Storm的抽象組件Trident能確保消息只被處理一次。
- 支持多種編程語言
Storm從一開始就設計為能被各種編程語言使用。Storm用Thrift定義和提交topologies。由於Thrift能被任何一種編程語言使用,因此,topologies也能被任何一種編程語言定義和使用。
同樣,spouts和bolts能用任何一種語言定義。不是基於JVM實現的Storm最賤spouts和bolts可以通過JSON協議通信。
-
容易部署和操作
Storm集群易部署,要求配置最少就可以啟動並運行。 -
免費開源
Storm遵循開源協議Apache License, Version 2.0
Storm有龐大的生態系統庫和工具:
1.Spouts:spouts已經和常用消息隊列系統JMS、Kafka、Redis pub/sub等進行了整合。
2.storm-state:storm-state使計算中的內存狀態易管理和可靠(通過分布式文件系統持久化)。
3.數據庫集成:bolts已整個不同的數據庫如MongoDB,RDBM,Cassandra等。
4.其他功能。