日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Storm程序的并发机制原理总结

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Storm程序的并发机制原理总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 目錄
    • 前言:
    • 1、概念
    • 2、配置并行度
    • 總結:

目錄

前言:

為了在以后的實踐中提高Storm程序執行的效率,我們還是有必要了解下對應的Storm程序的并發機制。(哈哈,雖然以博主小菜鳥的水平還沒有接觸到這種提升程序效率層面的東西(這里只是空談理論),但是Storm的并行機制還是有必要了解下,畢竟技多不壓身嘛!)

1、概念

  • 并發度:用戶指定的一個任務,可以被多個線程執行,**并發度的數量等于線程的數量。**一個任務的多個線程,會被運行在多個Worker(JVM)上,有一種類似于平均算法的負載均衡策略。盡可能減少網絡IO,和Hadoop中的MapReduce中的本地計算的道理一樣。
  • Workers (JVMs): 在一個物理節點上可以運行一個或多個獨立的JVM
    進程。一個Topology可以包含一個或多個worker(并行的跑在不同的物理機上), 所以worker process就是執行一個topology的子集, 并且worker只能對應于一個topology
  • Executors (threads): 在一個worker JVM進程中運行著多個Java線程。一個executor線程可以執行一個或多個tasks但一般默認每個executor只執行一個task。一個worker可以包含一個或多個executor,每個component (spout或bolt)至少對應于一個executor, 所以可以說executor執行一個compenent的子集, 同時一個executor只能對應于一個component。
  • Tasks(bolt/spout instances):Task就是具體的處理邏輯對象,**每一個Spout和Bolt會被當作很多task在整個集群里面執行。**每一個task對應到一個線程,而stream grouping則是定義怎么從一堆task發射tuple到另外一堆task。你可以調用TopologyBuilder.setSpout和TopBuilder.setBolt來設置并行度 — 也就是有多少個task。

2、配置并行度

  • 對于并發度的配置, 在storm里面可以在多個地方進行配置, 優先級為: defaults.yaml < storm.yaml < topology-specific configuration< internal component-specific configuration < external component-specific configuration
  • worker processes的數目, 可以通過配置文件和代碼中配置, worker就是執行進程, 所以考慮并發的效果,數目至少應該大亍machines的數目
  • executor的數目, component的并發線程數,只能在代碼中配置(通過setBolt和setSpout的參數), 例如,setBolt(“green-bolt”, new GreenBolt(), 2)
  • tasks的數目, 可以不配置, 默認和executor1:1, 也可以通過setNumTasks()配置 。Topology的worker數通過config設置,即執行該topology的worker(java)進程數。它可以通過 storm rebalance 命令任意調整。
  • 動態的改變并行度
    Storm支持在不 restart topology 的情況下, 動態的改變(增減) worker processes 的數目和 executors 的數目, 稱為rebalancing. 通過Storm web UI,或者通過storm rebalance命令實現:
    storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10

并發度描述如下圖所示:

配置實例

Config conf = newConfig(); conf.setNumWorkers(2); //用2個worker topologyBuilder.setSpout("blue-spout", newBlueSpout(), 2); //設置2個并發度 topologyBuilder.setBolt("green-bolt", newGreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout"); //設置2個并發度,4個任務 topologyBuilder.setBolt("yellow-bolt", newYellowBolt(), 6).shuffleGrouping("green-bolt"); //設置6個并發度 StormSubmitter.submitTopology("mytopology", conf, topologyBuilder.createTopology());

3個組件的并發度加起來是10,就是說拓撲一共有10個executor,一共有2個worker,每個worker產生10 / 2 = 5條線程。
綠色的bolt配置成2個executor和4個task。為此每個executor為這個bolt運行2個task。

總結:

知道了并發機制后,那么在實際生產中如何指定驅動類中每個組件的并發度數量?如何設置worker的數量?有以下幾個參考點:
1,根據上游的數據量來設置Spout的并發度。
2,根據業務復雜度和execute方法執行時間來設置Bolt并發度。
3,根據集群的可用資源來配置,一般情況下70%的資源使用率。
4,Worker的數量理論上根據程序并發度總的Task數量來均分,在實際的業務場景中,需要反復調整。

總結

以上是生活随笔為你收集整理的Storm程序的并发机制原理总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。