欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何理解Storm的并行度、Grouping策略以及消息可靠處理機(jī)制

如何理解Storm的并行度、Grouping策略以及消息可靠處理機(jī)制,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、華容ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的華容網(wǎng)站制作公司

概念:

Workers (JVMs): 在一個節(jié)點(diǎn)上可以運(yùn)行一個或多個獨(dú)立的JVM 進(jìn)程。一個Topology可以包含一個或多個worker(并行的跑在不同的machine上), 所以worker process就是執(zhí)行一個topology的子集, 并且worker只能對應(yīng)于一個topology

Executors (threads): 在一個worker JVM進(jìn)程中運(yùn)行著多個Java線程。一個executor線程可以執(zhí)行一個或多個tasks。但一般默認(rèn)每個executor只執(zhí)行一個task。一個worker可以包含一個或多個executor, 每個component (spout或bolt)至少對應(yīng)于一個executor, 所以可以說executor執(zhí)行一個compenent的子集, 同時一個executor只能對應(yīng)于一個component。

Tasks(bolt/spout instances):Task就是具體的處理邏輯對象,每一個Spout和Bolt會被當(dāng)作很多task在整個集群里面執(zhí)行。每一個task對應(yīng)到一個線程,而stream grouping則是定義怎么從一堆task發(fā)射tuple到另外一堆task。你可以調(diào)用TopologyBuilder.setSpout和TopBuilder.setBolt來設(shè)置并行度 — 也就是有多少個task。

 

配置并行度

對于并發(fā)度的配置, 在storm里面可以在多個地方進(jìn)行配置, 優(yōu)先級為:defaults.yaml < storm.yaml < topology-specific configuration < internal component-specific configuration < external component-specific configuration

worker processes的數(shù)目, 可以通過配置文件和代碼中配置, worker就是執(zhí)行進(jìn)程, 所以考慮并發(fā)的效果, 數(shù)目至少應(yīng)該大亍machines的數(shù)目

executor的數(shù)目, component的并發(fā)線程數(shù),只能在代碼中配置(通過setBolt和setSpout的參數(shù)), 例如, setBolt("green-bolt", new GreenBolt(), 2)

tasks的數(shù)目, 可以不配置, 默認(rèn)和executor1:1, 也可以通過setNumTasks()配置

Topology的worker數(shù)通過config設(shè)置,即執(zhí)行該topology的worker(java)進(jìn)程數(shù)。它可以通過 storm rebalance 命令任意調(diào)整。

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"); //set tasks number to 4
topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6).shuffleGrouping("green-bolt");
StormSubmitter.submitTopology("mytopology", conf, topologyBuilder.createTopology());

如何理解Storm的并行度、Grouping策略以及消息可靠處理機(jī)制  

動態(tài)的改變并行度

Storm支持在不 restart topology 的情況下, 動態(tài)的改變(增減) worker processes 的數(shù)目和 executors 的數(shù)目, 稱為rebalancing. 通過Storm web UI,或者通過storm rebalance命令實(shí)現(xiàn):

storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10
流分組策略----Stream Grouping

Stream Grouping,告訴topology如何在兩個組件之間發(fā)送tuple
定義一個topology的其中一步是定義每個bolt接收什么樣的流作為輸入。stream grouping就是用來定義一個stream應(yīng)該如果分配數(shù)據(jù)給bolts上面的多個tasks

Storm里面有7種類型的stream grouping,你也可以通過實(shí)現(xiàn)CustomStreamGrouping接口來實(shí)現(xiàn)自定義流分組
1. Shuffle Grouping
隨機(jī)分組,隨機(jī)派發(fā)stream里面的tuple,保證每個bolt task接收到的tuple數(shù)目大致相同。

2. Fields Grouping
按字段分組,比如,按"user-id"這個字段來分組,那么具有同樣"user-id"的 tuple 會被分到相同的Bolt里的一個task, 而不同的"user-id"則可能會被分配到不同的task。

3. All Grouping
廣播發(fā)送,對亍每一個tuple,所有的bolts都會收到

4. Global Grouping
全局分組,整個stream被分配到storm中的一個bolt的其中一個task。再具體一點(diǎn)就是分配給id值最低的那個task。

5. None Grouping
不分組,這個分組的意思是說stream不關(guān)心到底怎樣分組。目前這種分組和Shuffle grouping是一樣的效果, 有一點(diǎn)不同的是storm會把使用none grouping的這個bolt放到這個bolt的訂閱者同一個線程里面去執(zhí)行(如果可能的話)。

6. Direct Grouping
指向型分組, 這是一種比較特別的分組方法,用這種分組意味著消息(tuple)的發(fā)送者指定由消息接收者的哪個task處理這個消息。只有被聲明為 Direct Stream 的消息流可以聲明這種分組方法。而且這種消息tuple必須使用 emitDirect 方法來發(fā)射。消息處理者可以通過 TopologyContext 來獲取處理它的消息的task的id (OutputCollector.emit方法也會返回task的id) 

7. Local or shuffle grouping
本地或隨機(jī)分組。如果目標(biāo)bolt有一個或者多個task與源bolt的task在同一個工作進(jìn)程中,tuple將會被隨機(jī)發(fā)送給這些同進(jìn)程中的tasks。否則,和普通的Shuffle Grouping行為一致。

 

消息的可靠處理機(jī)制

    在storm中,可靠的信息處理機(jī)制是從spout開始的。一個提供了可靠的處理機(jī)制的spout需要記錄他發(fā)射出去的tuple,當(dāng)下游bolt處理tuple或者子tuple失敗時spout能夠重新發(fā)射。

    Storm通過調(diào)用Spout的nextTuple()發(fā)送一個tuple。為實(shí)現(xiàn)可靠的消息處理,首先要給每個發(fā)出的tuple帶上唯一的ID,并且將ID作為參數(shù)傳遞給SoputOutputCollector的emit()方法:collector.emit(new Values("value1","value2"), msgId); 給tuple指定ID告訴Storm系統(tǒng),無論處理成功還是失敗,spout都要接收tuple樹上所有節(jié)點(diǎn)返回的通知。如果處理成功,spout的ack()方法將會對編號是msgId的消息應(yīng)答確認(rèn);如果處理失敗或者超時,會調(diào)用fail()方法。

    bolt要實(shí)現(xiàn)可靠的信息處理機(jī)制包含兩個步驟:1.當(dāng)發(fā)射衍生的tuple時,需要錨定讀入的tuple;2.當(dāng)處理消息成功或失敗時分別確認(rèn)應(yīng)答或者報錯。

    錨定一個tuple的意思是,建立讀入tuple和衍生出的tuple之間的對應(yīng)關(guān)系,這樣下游的bolt就可以通過應(yīng)答確認(rèn)、報錯或超時來加入到tuple樹結(jié)構(gòu)中。可以通過調(diào)用OutputCollector的emit()的一個重載函數(shù)錨定一個或一組tuple:collector.emit(tuple, new Values(word))

    非錨定(collector.emit(new Values(word));)的tuple不會對數(shù)據(jù)流的可靠性起作用。如果一個非錨定的tuple在下游處理失敗,原始的根tuple不會重新發(fā)送。
 
    超時時間可以通過任務(wù)級參數(shù)Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS進(jìn)行配置,默認(rèn)超時值為30秒。

     Storm 系統(tǒng)中有一組叫做"acker"的特殊的任務(wù),它們負(fù)責(zé)跟蹤DAG(有向無環(huán)圖)中的每個消息。acker任務(wù)保存了spout消息id到一對值的映射。第一個值就是spout的任務(wù)id,通過這個id,acker就知道消息處理完成時該通知哪個spout任務(wù)。第二個值是一個64bit的數(shù)字,我們稱之為"ack val", 它是樹中所有消息的隨機(jī)id的異或計(jì)算結(jié)果。ack val表示了整棵樹的的狀態(tài),無論這棵樹多大,只需要這個固定大小的數(shù)字就可以跟蹤整棵樹。當(dāng)消息被創(chuàng)建和被應(yīng)答的時候都會有相同的消息id發(fā)送過來做異或。

    每當(dāng)acker發(fā)現(xiàn)一棵樹的ack val值為0的時候,它就知道這棵樹已經(jīng)被完全處理了。因?yàn)橄⒌碾S機(jī)ID是一個64bit的值,因此ack val在樹處理完之前被置為0的概率非常小。假設(shè)你每秒鐘發(fā)送一萬個消息,從概率上說,至少需要50,000,000年才會有機(jī)會發(fā)生一次錯誤。即使如此,也只有在這個消息確實(shí)處理失敗的情況下才會有數(shù)據(jù)的丟失!

 有三種方法可以去掉消息的可靠性:
1、將參數(shù)Config.TOPOLOGY_ACKERS設(shè)置為0,通過此方法,當(dāng)Spout發(fā)送一個消息的時候,它的ack方法將立刻被調(diào)用;
2、Spout發(fā)送一個消息時,不指定此消息的messageID。當(dāng)需要關(guān)閉特定消息可靠性的時候,可以使用此方法;
3、最后,如果你不在意某個消息派生出來的子孫消息的可靠性,則此消息派生出來的子消息在發(fā)送時不要做錨定,即在emit方法中不指定輸入消息。因?yàn)檫@些子孫消息沒有被錨定在任何tuple tree中,因此他們的失敗不會引起任何spout重新發(fā)送消息。 

看完上述內(nèi)容,你們掌握如何理解Storm的并行度、Grouping策略以及消息可靠處理機(jī)制的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

名稱欄目:如何理解Storm的并行度、Grouping策略以及消息可靠處理機(jī)制
網(wǎng)站URL:http://chinadenli.net/article6/jgggig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站維護(hù)標(biāo)簽優(yōu)化、建站公司響應(yīng)式網(wǎng)站、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
亚洲国产丝袜一区二区三区四| 欧美日韩一级黄片免费观看| 国产欧美亚洲精品自拍| 日韩人妻中文字幕精品| 亚洲综合天堂一二三区| 少妇被粗大进猛进出处故事| 午夜色午夜视频之日本| 国产又粗又深又猛又爽又黄| 成人精品一级特黄大片| 黄片免费播放一区二区| 午夜福利视频六七十路熟女| 激情国产白嫩美女在线观看| 91在线爽的少妇嗷嗷叫| 日韩一区欧美二区国产| 日韩不卡一区二区三区色图| 日本道播放一区二区三区| 国产一区二区三区草莓av| 精品女同在线一区二区| 91人妻人人做人碰人人九色| 久久精品欧美一区二区三不卡| 麻豆精品视频一二三区| 黄片在线免费观看全集| 丰满少妇被猛烈撞击在线视频| 欧美乱码精品一区二区三| 精品日韩中文字幕视频在线| 白白操白白在线免费观看 | 日韩欧美精品一区二区三区| 日本久久中文字幕免费| 在线观看国产成人av天堂野外| 欧美大粗爽一区二区三区| 91精品国产综合久久福利| 插进她的身体里在线观看骚| 麻豆国产精品一区二区| 九九热精品视频免费观看| 亚洲中文字幕在线视频频道| 国产精品白丝一区二区| 日韩一级一片内射视频4k| 国产亚洲不卡一区二区| 亚洲人妻av中文字幕| 亚洲中文字幕视频在线播放| 久久精品a毛片看国产成人|