本文是本人根據storm官方文件個人翻譯整理的,如果有不妥或者錯誤之處,歡迎指正。原英文官方文件
storm區分了用於在storm集群中實際執行拓撲的以下三個主要實體:
工作程序(worker processes)
執行器(executors)
任務(tasks)
這裡是他們的關係的簡單說明:
工作程序執行著乙個拓撲的子集。乙個工作程序(worker processes)是屬於乙個特定的拓撲的,工作程序可以執行這個拓撲中乙個或多個元件(spouts或者bolts)的乙個或多個執行器(executors)。乙個執行的拓撲是由多個這樣的程序組成的,這些程序都是執行在storm集群中的多個機器中。
執行器(executor)是乙個由工作程序建立出來的執行緒。它會執行乙個或多個任務(tasks),而且這些任務都屬於同乙個元件(spouts或者bolts)的。
任務(task)是真正執行資料處理的–在**中實現的每個spout或bolt在集群中執行任意數量的任務。
乙個元件的任務數量在乙個拓撲的生命週期中總是相同的,但是乙個元件的執行器(執行緒)可能會隨時間而變化。這就意味著下面這個情況總是成立的:#threads ≤ #tasks
。 預設情況下,任務的數量設定為與執行器的數量相同,即storm將為每個執行緒執行乙個任務。
注意,在storm的術語中,「並行性(parallelism)」特別用於描述所謂的並行性提示(parallelism hint),這指的就是元件的執行器(執行緒)的初始數量。 在本文中,在更一般的意義上,我們不僅使用術語「並行性」來描述如何配置執行程式的數量,還用來描述配置工作程序的數量和storm拓撲的任務數。 當我們在storm的正常,狹義的定義中使用「並行性(parallelism)」時,我們會特別提出。
以下部分概述了各種配置選項以及如何你的在**中進行設定。設定這些選項有不止一種方式,但是表中只列出了其中一部分。storm目前具有以下配置設定優先順序順序:
defaults.yaml < storm.yaml < topology-specific configuration < internal component-specific configuration < external component-specific configuration.
以下是在實踐中設定的示例**段:
topologybuilder.setbolt("green-bolt", new greenbolt(), 2)
.setnumtasks(4)
.shufflegrouping("blue-spout");
在上面的**中,我們配置storm執行greednbolt時,初始數量為兩個執行器(executors)和四個相關任務(tasks)。 storm將對每個執行器(執行緒)執行兩個任務。 如果沒有顯式配置任務數,storm將預設為每個executor執行乙個task。
下圖展示了乙個簡單的拓撲在執行中是什麼樣的。這個拓撲包含了3個元件,乙個叫bluespout的spout,2個bolts分別為greenbolt和yellowbolt。
這些元件是這樣連線的,bluespout將其輸出傳送到greenbolt,greenbolt又將自己的輸出傳送到yellowbolt。
config conf = new config();
conf.setnumworkers(2); // use two worker processes
topologybuilder.setspout("blue-spout", new bluespout(), 2); // set parallelism hint to 2
topologybuilder.setbolt("green-bolt", new greenbolt(), 2)
.setnumtasks(4)
.shufflegrouping("blue-spout");
topologybuilder.setbolt("yellow-bolt", new yellowbolt(), 6)
.shufflegrouping("green-bolt");
stormsubmitter.submittopology(
"mytopology",
conf,
topologybuilder.createtopology()
);
當然,storm還提供了額外的配置設定來控制拓撲的並行性,包括:
storm乙個很好的特性就是,你可以增加或減少worker程序或executors的數量,而無需重新啟動集群或拓撲。 這個行為被稱為rebalancing(重新平衡)。
你有2個選項去重新平衡乙個拓撲:
使用storm ui去平衡拓撲
使用cli工具,如下所述
以下是使用cli工具的示例:
## reconfigure the topology "mytopology" to use 5 worker processes,
## the spout "blue-spout" to use 3 executors and
## the bolt "yellow-bolt" to use 10 executors.
$ storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
併發性和並行性的區別
所有的併發處理都有排隊等候,喚醒,執行至少三個這樣的步驟.所以併發肯定是巨集觀概念,在微觀上他們都是序列被處理的,只不過資源不會在某乙個上被阻塞 一般是通過時間片輪轉 所以在巨集觀上看多個幾乎同時到達的請求同時在被處理。如果是同一時刻到達的請求也會根據優先順序的不同,而先後進入佇列排隊等候執行。併發...
並行性和併發性的區別
前段時間被別人問起關於核心併發性的問題,當時隨便說了一下,但後來細想,我還真不知道什麼是併發性,回想一下當年在學校裡學作業系統這門課程的時候,這兩個概念都是一知半解的,更別說這麼幾年過去了,更加就模糊了。網上搜了一大堆資料,下面來整理一下思路!所謂並行性 parallelism 是指在同一時刻或是同...
隨想錄(為什麼迴圈佇列具有先天的並行性)
迴圈佇列是很多人喜歡用的一種資料結構。本著先來先服務的特性,迴圈佇列是一種十分簡單 健壯的資料結構。不像鍊錶 二叉樹,如果使用不慎,就會造成很大的麻煩,但是在迴圈佇列上面則沒有這個煩惱。同樣而言,迴圈佇列具有很強的並行性,如果服務的資料比較少,那麼完全可以利用兩個執行緒進行資料的儲存和處理工作。只要...