溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Storm基本概念是什么

發布時間:2021-12-23 11:43:27 來源:億速云 閱讀:139 作者:iii 欄目:云計算
# Storm基本概念是什么

## 一、Storm概述

Apache Storm是一個開源的分布式實時計算系統,由Nathan Marz團隊于2011年創建,后成為Apache頂級項目。它能夠可靠地處理無界數據流(即持續不斷產生的數據),適用于實時分析、在線機器學習、持續計算等場景。

### 核心特性
- **低延遲**:毫秒級響應能力
- **高容錯**:自動處理節點故障
- **可擴展**:線性擴展能力
- **保證數據不丟失**:精確一次(exactly-once)處理語義

## 二、核心架構組件

### 1. Topology(拓撲)
Storm的核心計算單元,是由Spout和Bolt組成的**有向無環圖(DAG)**。一個拓撲持續運行直到顯式終止。

```java
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new RandomSentenceSpout(), 5);
builder.setBolt("split", new SplitSentenceBolt(), 8).shuffleGrouping("spout");
builder.setBolt("count", new WordCountBolt(), 12).fieldsGrouping("split", new Fields("word"));

2. Spout(噴口)

數據流的源頭,通常從消息隊列(如Kafka)或數據庫讀取數據。常見實現: - KafkaSpout:從Kafka消費數據 - DRPCSpout:用于分布式RPC

3. Bolt(螺栓)

數據處理單元,可執行: - 過濾(Filtering) - 聚合(Aggregation) - 連接(Joins) - 數據庫交互等操作

public class WordCountBolt extends BaseBasicBolt {
    private Map<String, Integer> counts = new HashMap<>();
    
    public void execute(Tuple tuple, BasicOutputCollector collector) {
        String word = tuple.getString(0);
        counts.merge(word, 1, Integer::sum);
        collector.emit(new Values(word, counts.get(word)));
    }
}

三、關鍵概念詳解

1. 數據模型

概念 說明
Tuple 基本數據單元,包含命名字段列表
Stream 由相同字段結構的Tuple組成的序列
Stream ID 多流場景下的標識符(默認”default”)

2. 分組策略(Grouping)

決定Tuple如何路由到Bolt:

分組類型 描述
Shuffle Grouping 隨機均勻分發(負載均衡
Fields Grouping 按指定字段哈希分發(相同字段值到同一任務)
All Grouping 廣播到所有下游任務
Global Grouping 全部發送到同一個任務(通常是ID最小的)
Direct Grouping 由發送方指定目標任務

3. 可靠性機制

  • Ack機制:通過唯一ID跟蹤每個Tuple的處理狀態
  • 錨定(Anchoring):建立Tuple間的關聯關系
  • 失敗重放:超時未確認的Tuple會被重新發送
// 可靠處理示例
collector.emit(tuple, new Values(word)); // 錨定到輸入tuple
collector.ack(tuple); // 顯式確認

四、集群架構

1. 物理組件

角色 職責
Nimbus 主節點,負責拓撲提交、任務分配(類似Hadoop的JobTracker)
Supervisor 工作節點,管理Worker進程
Worker 實際執行任務的JVM進程(每個Worker運行特定拓撲的部分任務)
ZooKeeper 協調集群狀態,實現Nimbus與Supervisor的解耦

Storm基本概念是什么

2. 并行度控制

通過以下參數組合決定實際并發: - Worker數量Config.setNumWorkers() - Executor數量:組件并行度參數 - Task數量setNumTasks()(默認等于Executor數)

五、與其他技術的對比

特性 Storm Spark Streaming Flink
處理模型 原生流處理 微批處理 原生流處理
延遲 毫秒級 秒級 毫秒級
狀態管理 需自行實現 內置 完善的內置支持
語義保證 At-least-once Exactly-once Exactly-once
成熟度 快速發展中

六、典型應用場景

  1. 實時監控系統

  2. 金融風控

    • 實時反欺詐
    • 股票價格波動分析
  3. 物聯網(IoT)

    • 傳感器數據分析
    • 設備狀態預警
  4. 推薦系統

    • 用戶行為實時分析
    • 動態調整推薦策略

七、發展演進

  • Storm 2.0(2019年發布)重大改進:

    • 完全重寫的核心引擎
    • 資源感知調度
    • 改進的窗口API
    • 支持Kubernetes部署
  • Trident:Storm的高級抽象

    • 提供批處理語義
    • 內置狀態管理
    • 更簡單的Exactly-once實現
TridentTopology topology = new TridentTopology();
topology.newStream("spout", spout)
       .groupBy(new Fields("word"))
       .persistentAggregate(new MemoryMapState.Factory(), new Count(), new Fields("count"));

結語

Storm作為最早的實時計算系統之一,雖然面臨Flink等新框架的競爭,但其簡單直接的編程模型和經過驗證的穩定性,使其在特定場景仍具優勢。理解其核心概念有助于根據業務需求選擇合適的流處理技術。 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女