码迷,mamicode.com
首页 > 其他好文 > 详细

storm之10:可靠性

时间:2015-06-17 16:46:10      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

storm blueprint: P20
从零开始学storm  : P40
可靠性:spout发送的消息会被拓扑树上的所有节点ack,否则会一直重发。
完整的可靠性示例请参考storm blueprint的chapter1 v4代码,或者P22。
关键步骤如下:
(一)spout
1、创建一个map,用于记录已经发送的tuple的id与内容,此为待确认的tuple列表。
private ConcurrentHashMap<UUID,Values> pending;
2、发送tuple时,加上一个参数用于指明该tuple的id。同时,将此tuple加入map中,等待确认。
UUID msgId = UUID.randomUUID();
this.pending.put(msgId,values);
this.collector.emit(values,msgId);
3、定义ack方法与fail方法。
ack方法将tuple从map中取出
this.pending.remove(msgId);
fail方法将tuple重新发送
this.collector.emit(this.pending.get(msgId),msgId);

对于没回复的tuple,会定时重新发送。

(二)bolt
处理该tuple的每个bolt均需要增加以下内容:
1、emit时,增加一个参数anchor,指定响应的tuple
collector.emit(tuple,new Values(word));
2、确认接收到的tuple已经处理
this.collector.ack(tuple);

storm之10:可靠性

标签:

原文地址:http://blog.csdn.net/jinhong_lu/article/details/46534303

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!