emit(Listtuple,ObjectmessageId){returnemit(Utils.DEFAULT_STREAM_ID,tuple,messageId);}這里的t" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

理解Storm可靠性消息

系統(tǒng) 2079 0

看過(guò)一些別人寫(xiě)的, 感覺(jué)有些東西沒(méi)太說(shuō)清楚,個(gè)人主要以源代碼跟蹤,參考個(gè)人理解講述,有錯(cuò)誤請(qǐng)指正。

1基本名詞

1.1 Tuple: 消息傳遞的基本單位。很多文章中介紹都是這么說(shuō)的, 個(gè)人覺(jué)得應(yīng)該更詳細(xì)一點(diǎn)。

?在spout發(fā)送的時(shí)候,函數(shù)原型

?public List<Integer> emit(List<Object> tuple, Object messageId) {
??????? return emit(Utils.DEFAULT_STREAM_ID, tuple, messageId);
??? }

這里的tuple, 實(shí)際上是List<Object> 對(duì)象,返回的是 List<Integer> 是要發(fā)送的tast的IdsList

在bolt接收的時(shí)候, 函數(shù)原型

public void execute(Tuple tuple)

變成了一個(gè)Tuple對(duì)象,? 結(jié)構(gòu)應(yīng)該也是一個(gè)list, List<Field1, value1, Field2, value2..>這樣的一個(gè)結(jié)構(gòu), FieldList ValueList, 我們根據(jù)對(duì)應(yīng)的fieldname就可以取出對(duì)應(yīng)的getIntegerByField方法

回到spout對(duì)象中來(lái), 在spout有一個(gè)定義的輸出字段

??? public void declareOutputFields(OutputFieldsDeclarer declarer) {
?? ??? ?declarer.declare(new Fields("word"));
?? ?}

這里定義的一個(gè)字段,所以我們?cè)趀mit的時(shí)候就只能發(fā)送一個(gè)包含一個(gè)value的tuple(spout部分), storm會(huì)將field, 和 發(fā)送的value下標(biāo)對(duì)應(yīng), 變成一個(gè)Tuple對(duì)象,? 也就是上面說(shuō)的

List<Field1, value1, Field2, value2..>這樣的一個(gè)結(jié)構(gòu),? 在bolt 之間傳遞tuple, 發(fā)送又是List<Object> tuple, 根據(jù)組裝bolt定義的fiels, 再組合成Tuple對(duì)象給下一個(gè)Bolt處理

在發(fā)射的最后 還有一個(gè) void emitDirect(int taskId, String streamId, List<Object> tuple, Object messageId);? 因?yàn)樯厦鎒mit的時(shí)候已經(jīng)返回List<taskid>, 所以它就知道要發(fā)送給哪些taskid處理,然后將taskid 和 tuple放入隊(duì)列 LinkedBlockingQueue , 代碼如下

; worker.clj

( defn mk-transfer- fn [ transfer-queue ]

( fn [ task ^Tuple tuple ]

(.put ^LinkedBlockingQueue

transfer-queue [ task tuple ] )

))
然后單獨(dú)會(huì)開(kāi)啟一個(gè)叫async-loop的線程,取出每條記錄(taskid, tuple), 然后worker會(huì)從當(dāng)前task建立一個(gè)到目標(biāo)task的zeromq連接, 通過(guò)zeromq將tuple發(fā)送給目標(biāo)task
?

總結(jié): 每次emit都是根據(jù)List<Object>和定義的輸出Fields組合成一個(gè)Tuple對(duì)象,,每個(gè)接受對(duì)象接收的是Tuple對(duì)象,如果處理完再發(fā)送又再組合字段, 在emit的時(shí)候返回LIst<taskids>,所以就知道發(fā)送給哪些Task, 然后拿這些taskid和tuple再組合成一個(gè)任務(wù)隊(duì)列,通過(guò)zeromq發(fā)送到目標(biāo)task,目標(biāo)task接收到tuple進(jìn)程處理至于并發(fā)度控制, 參考

      http://www.cnblogs.com/chengxin1982/p/4001275.html


    

?

TupleID Tuple對(duì)應(yīng)的ID,? 在創(chuàng)建的時(shí)候賦予一個(gè)64位的id,主要用來(lái)跟蹤消息

MsgID? 官方解釋 Emits a new tuple to the default output stream with the given message ID. 如果不指定,acker不會(huì)跟蹤。主要作用 , 在spout收到fail時(shí)候, 能夠定位到是哪條消息出錯(cuò),能夠決定重發(fā). 使用實(shí)例? _collector.emit(new Values(sentence),? new Integer(num));

acker 消息跟蹤者. acker 存儲(chǔ)一個(gè)Map<taskid, ack val> ,? taskid為祖宗tuple創(chuàng)建者的taskid ,? ack_val 為消息傳遞過(guò)程中的 tupleid的xor值,如果為0則知道是哪個(gè)spout或者bolt已經(jīng)處理完了, 為什么會(huì)有bolt, 因?yàn)閎olt在發(fā)射的時(shí)候,如果非錨定,就是不帶tuple發(fā)射,它會(huì)被認(rèn)為是祖宗tuple, 上一個(gè)tuple會(huì)認(rèn)為已經(jīng)結(jié)束.
至于分配發(fā)射源分配到acker, storm采用一致性hash 祖宗tupleid來(lái)分配,因?yàn)樵谒械膖uple中都能知道祖宗tupleid,所以在子孫tuple處理時(shí), 知道該發(fā)送給哪個(gè)acker跟蹤

?

理解Storm可靠性消息


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产在线视频资源 | 免费视频网站在线观看黄 | 激情四房| 四虎www成人影院观看 | 黄色自拍网站 | 麻豆国产高清精品国在线 | 成人四虎影院 | 欧美一级成人影院免费的 | 欧美精品成人a多人在线观看 | 九九免费在线视频 | 国产午夜爽爽窝窝在线观看 | 国产精品久久久久久久久久直 | 亚洲国产激情在线一区 | 99国内精品久久久久久久 | 日韩中文字幕一区二区不卡 | 老司机午夜精品视频播放 | 伊人精品在线观看 | 99精品一区二区免费视频 | 久久精品国产久精国产80cm | 亚洲性事| 国内高清久久久久久久久 | 久久这里只精品国产99热8 | 精品国产免费观看 | 国产午夜精品尤物福利视频 | 久久大香伊蕉在人线国产昨爱 | 激情五月婷婷基地 | 日本边添边爱边做视频 | 久久久日韩精品国产成人 | 久久不卡一区二区三区 | 亚洲精品综合一区二区三区在线 | 岛国一级毛片 | 99爱在线视频这里只有精品 | 久久久久99精品成人片三人毛片 | 日日噜噜夜夜狠狠视频无 | 日日操干 | 亚洲视频 在线观看 | 亚洲小说春色综合另类网蜜桃 | 亚洲精品一区二区久久这里 | 久久久国产免费影院 | 午夜dy888理论不卡达达兔 | 久久久久亚洲精品一区二区三区 |