ApacheStorm官方文件——在生產環境中執行拓撲
在生產環境叢集中執行拓撲的方式與本地模式非常相似,主要包括以下幾個步驟:
1) 定義拓撲(如果使用 Java 進行開發就可以使用 TopologyBuilder)
2) 使用 StormSubmitter 向叢集提交拓撲。StormSubmitter
接收拓撲名稱、拓撲配置資訊以及拓撲物件本身作為引數,如下所示:
Config conf = new Config();
conf.setNumWorkers(20);
conf.setMaxSpoutPending(5000);
StormSubmitter.submitTopology("mytopology", conf, topology);
3) 將你的拓撲程式以及相關依賴庫(除了 Storm 本身的依賴 —— 這些依賴已經新增到 Storm 的工作節點的 classpath 中了)打包為一個 jar 檔案。
如果你使用 Maven 進行開發,可以使用 Maven Assembly Plugin 來打包,你需要做的僅僅是將下述外掛配置新增到你的 pom.xml 中:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.path.to.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
然後就可以執行 mvn assembly:assembly
來打包。請確保你已經在 dependencies 中排除了 Storm 本身的 jar 包。
4) 使用 storm
客戶端向叢集提交拓撲,在提交時需要指定好你的 jar 包的相關路徑、主函式所在類名稱以及其他一些需要的引數,下面是一個提交拓撲的例子:
storm jar path/to/allmycode.jar org.me.MyTopology arg1 arg2 arg3
storm jar
會將 jar 提交到叢集中,同時配置 StormSubmitter
類來與正確的叢集建立連線。在上面的例子裡,上傳 jar 包之後,storm jar
就會使用 “arg1”、“arg2”、“arg3” 三個引數來執行 org.me.MyTopology
的 main 函式。
關於如何配置 Storm 客戶端與 Storm 叢集的互動的詳細資訊,請參閱配置開發環境一文。
常用配置
拓撲中有很多引數可以設定。你可以在這裡找到完整的配置項列表。其中,以 “TOPOLOGY” 開頭的引數可以被拓撲中的對應配置項覆蓋(其他引數是叢集的配置引數,不能被直接覆蓋)。以下是拓撲中的一些常用引數:
- Config.TOPOLOGY_WORKERS:此項設定了可以用於執行拓撲的 worker 程式數。例如,如果你將該引數值設定為 25,那麼在叢集中就會有 25 個可以執行任務的 Java 程式。另外,如果你將拓撲的並行度設定成了 150,那麼每個 worker 程式就會執行 6 個任務執行緒。
- Config.TOPOLOGY_ACKERS:此項設定了用於跟蹤 spout 傳送的 tuple 樹的 ack 任務數。Ackers 是 Storm 可靠性模型的重要組成部分,你可以在訊息的可靠性保障一文中瞭解更多相信資訊。
- Config.TOPOLOGY_MAX_SPOUT_PENDING:此項設定了單個 Spout 任務能夠掛起的最大的 tuple 數(tuple 掛起表示該 tuple 已經被髮送但是尚未被 ack 或者 fail)。強烈建議設定此引數來防止訊息佇列的爆發性增長。
- Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS:此項設定了 ackers 跟蹤 tuple 的超時時間。預設值是 30 秒,對於大部分拓撲而言這個值基本上是不需要改動的。關於 Storm 的訊息可靠性模型請參考訊息的可靠性保障一文。
- Config.TOPOLOGY_SERIALIZATIONS:此項用於在 Storm 中註冊更多的序列化工具,這樣你就可以使用自定義的序列化型別來處理 tuple。
Kill 拓撲
執行以下命令來 kill 拓撲:
storm kill {topologyname}
其中 topologyname
就是你提交拓撲時使用的拓撲名稱。
不過,在執行該命令後 Storm 不會馬上 kill 掉該拓撲。Storm 會先停止所有 spouts 的活動,使得他們不能繼續傳送 tuple,然後 Storm 會等待 Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS
參數列示的一段時間,然後才會結束所有的 worker 程式。這可以保證拓撲在被 kill 之前可以有足夠的時間完成已有的 tuple 的處理。
更新執行中的拓撲
目前只能通過先 kill 掉當前的拓撲再重新提交新拓撲的方式來更新執行中的拓撲。不過社群計劃在將來實現一個 storm swap
命令來將一個執行中的拓撲替換為一個新的拓撲,儘可能減少停機時間,同時確保不會有兩個拓撲同時處理 tuple 的情況發生。
監控拓撲
監控拓撲執行的最好方式是使用 Storm UI。Storm UI 可以顯示任務中的錯誤資訊以及每個執行中拓撲中每個元件的吞吐量與端到端延時的效能資訊。
當然,你也可以通過檢視在工作節點機器上的日誌資訊來了解拓撲執行情況。
相關文章
- 如何在生產環境執行容器
- ApacheStorm官方文件——常用模式ApacheORM模式
- ApacheStorm官方文件——基礎概念ApacheORM
- ApacheStorm官方文件——問題與解決ApacheORM
- Java列舉類在生產環境中的使用方式Java
- 在生產環境使用Docker部署應用Docker
- 如何建立 Angular library 並在生產環境中消費Angular
- 在Grammarly的生產環境中執行LispLisp
- 在生產中執行Elasticsearch的深入指南 – TechNotesElasticsearch
- 在生產中執行kubernetes上的Istio
- Mysql遷移工具在生產環境下的使用MySql
- MongoDB系列三:Replica Sets在生產環境中安裝配置的注意事項MongoDB
- [譯] Node.js 之戰: 如何在生產環境中除錯錯誤Node.js除錯
- 單例模式在生產環境jedis叢集中的應用單例模式
- ForkJoinPool在生產環境中使用遇到的一個問題
- 在生產環境中除錯 Angular 應用程式而不顯示源對映除錯Angular
- 【機器學習】在生產環境使用Kafka構建和部署大規模機器學習機器學習Kafka
- nodejs中REPL執行環境解析NodeJS
- JDK 9 釋出僅數月,為何在生產環境中卻頻遭嫌棄?JDK
- 拓撲排序排序
- 在生產環境中使用預寫日誌WAL的SQLite - victoriaSQLite
- JavaScript執行環境與執行棧JavaScript
- 如何一步步在生產環境上部署django和vueDjangoVue
- Webpack中的sourcemap以及如何在生產和開發環境中合理的設定sourcemap的型別Web開發環境型別
- Java執行環境配置Java
- POJ1094[有向環 拓撲排序]排序
- 拓撲排序,YYDS排序
- 拓撲排序模板排序
- 大資料執行環境的執行大資料
- 8.4.9 在truffle環境中執行外部指令碼指令碼
- 如何在生產環境排查 Rust 記憶體佔用過高問題Rust記憶體
- 給在生產環境下給php安裝apc加速擴充套件指令碼PHP套件指令碼
- 生產環境執行Docker的9個關鍵決策Docker
- 直播預約 | 在生產環境中,阿里雲如何構建高效能雲原生容器網路?阿里
- 如何在生產環境中通過Restful API的方式請求重啟Spring Boot應用?RESTAPISpring Boot
- 經驗分享:HelloFresh在生產中執行Istio的經驗教訓 - Craig HuberAI
- 網路拓撲例項之RRPP單環(五)
- LNMP環境中phpadmin配置文件LNMPPHP