1. 程式人生 > >Storm的一些基本概念

Storm的一些基本概念

前言

最近在閱讀Flink官網的時候,閱讀到Storm Compatibility Beta章節,就是Flink可以無縫相容Storm。

  1. 在Flink執行一個完整的Storm拓撲;
  2. 在Flink流程式中使用Storm的Spout/Bolt作為資料來源/操作器。

對於Storm的一些基本概念不懂的同學,還是有必要先熟悉瞭解下Storm的基本概念。

Storm基本元素

storm分散式計算結構稱為topology(拓撲)由stream,spout,bolt組成。
在這裡插入圖片描述
spout代表一個storm拓撲中的資料入口,連線到資料來源,將資料轉化為一個個tuple,併發射tuple。

stream是由無限制個tuple組成的序列。tuple為storm的核心資料結構,是包含了一個或多個鍵值對的列表。

bolt可以理解為計算程式中的運算或者函式,bolt的上游是輸入流,經過bolt實施運算後,可輸出一個或者多個輸出流。

bolt可以訂閱多個由spout或者其他bolt發射的資料流,用以構建複雜的資料流轉換網路。

在這裡插入圖片描述

上述即為storm最基本的組成元素,無論storm如何執行,都是以stream,spout,bolt做為最基本的執行單元。而這三者則是共同構成了一個storm拓撲topology。

storm叢集組成部分

首先需要明確一個概念,bolt,spout例項,都屬於任務,spout產生資料流,併發射,bolt消費資料流,進行計算,並進行落地或再發射,他們的存在以及執行過程都需要消耗資源,而storm叢集是一個提供了資源的叢集,我們要做的就是將spout/boult例項合理分配到storm叢集提供的計算資源上,這樣就可以讓spout/bolt得以執行。
在這裡插入圖片描述

worker為JVM程序,一個topology會分配到一個或者多個worker上執行。

executor是worker內的java執行緒,是具體執行bolt/spout例項用的。下篇文章在介紹如何提供storm平行計算能力時會介紹worker以及executor的配置。

在storm中,worker是由supervisor程序建立,並進行監控的。storm叢集遵循主從模式,主為nimbus,從為supervisor,storm叢集由一個主節點(確實有單點問題),和多個工作節點(supervisor)組成,並使用zookeeper來協調叢集中的狀態資訊,比如任務分配情況,worker狀態,supervisor的拓撲度量。
在這裡插入圖片描述


通過配置可指定supervisor上可執行多少worker。一個worker代表一個slot。

nimbus守護程序的主要職責是管理,協調和監控在叢集上執行的topology.包括topology的釋出,任務指派,事件處理失敗時重新指派任務。

supervisor守護程序等待nimbus分配任務後生成並監控workers執行任務。supervosior和worker都是執行在不同的JVM程序上。

筆者定義了一個spout,兩個bolt 運算過程如下:
在這裡插入圖片描述

其中streamMaking是一個不斷生成隨機數(5~30)的spout例項,Step1Bolt會過濾掉15以下的隨機數(過濾),15以上的隨機數會乘以16(計算),再將結果向後發射。Step2Bolt訂閱Step1Bolt發射的資料,接收資料後,列印輸出。流程結束。

筆者在定義spout/bolt例項時,配置了spout,bolt的並行執行數。其中

streamMaking:4 Step1Bolt:2 Step2Bolt 1

這樣,釋出成功後,storm會根據我的配置,分配足夠的計算資源給予spout/bolt進行執行。

釋出:
釋出時,spout和bolt都是在一起以jar的形式釋出到nimbus上的,分配後,內部定義的spout和bolt將以元件的形式被nimbus分配至worker程序中執行。

其中worker都是由supervisor建立的,創建出來的worker程序與supervisor是分開的不同程序。一個supervisor可建立多少worker可通過修改storm安裝目錄下的storm.yaml進行配置。
在這裡插入圖片描述

ask是執行的最小單元。spout/bolt例項在定義中指定了,要起多少task,以及多少executor。也即一個topology釋出之前已經定義了task總量,和需要多少資源來執行我的task總量。nimbus將根據已有的計算資源進行分配。

下圖中: nimbus左邊代表著計算任務量,和所需計算配置

nimbus右邊代表著計算資源

nimbus將根據計算資源資訊,合理的分發計算任務量。

在這裡插入圖片描述
釋出成功後,通過storm自帶的UI功能,可以檢視你釋出的topology執行以及其中每個元件的分佈執行情況。
在這裡插入圖片描述
在這裡插入圖片描述
監控影象中清晰的顯示了,目前部署的topology,以及topology中每個元件所分配的計算資源所在host,以及每個元件發射了多少tuple,接收了多少tuple,以及有多少個executor在並行執行。

本文講述了storm內的基本元素以及基本概念,後續將講述storm的重點配置資訊,以及如何提高併發計算能力,視窗概念等高階特性,後續會進行原始碼分析,以及與其他實時計算中介軟體的比較。