分享

storm tuple的概念

kanwei163 发表于 2014-12-31 15:53:22 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 7 18324
看了一些资料,发现storm中的tuple经常被提起,

那么这个tuple指的是spout最初产生的tuple,还是任何一个bolt产生的都叫tuple

比如:
如果tuple出错,则可以被重传,但是如何保证出错的tuple只被处理一次呢?


这里的tuple指的是 spout产生的tuple还是bolt产生的?


如果是bolt产生的,那么bolt能重发错误的tuple?貌似bolt不能重发吧?如果这样,那么tuple就应该指的是spout产生的,而bolt发送的信息也属于这个根spout产生的tuple、。

已有(7)人评论

跳转到指定楼层
tntzbzc 发表于 2014-12-31 16:01:05
Storm处理数据的基本单位是Tuple,也就是一个通用的数据容器,支持一些基本数据类型和自定义类型。
无论是bolt,还是spout,他们处理的单位都是Tuple。


Storm 层面有 ACK 机制来保证没有被发送成功的消息会被重发
回复

使用道具 举报

kanwei163 发表于 2014-12-31 16:03:50
tntzbzc 发表于 2014-12-31 16:01
Storm处理数据的基本单位是Tuple,也就是一个通用的数据容器,支持一些基本数据类型和自定义类型。
无论是bo ...

bolt会重发么?还是spout会重发?多谢
回复

使用道具 举报

tntzbzc 发表于 2014-12-31 16:06:22
无论是bolt,还是spout都有ack和fail方法。主要是看调用还是不调用。
如果想保证数据可靠,重发消息,需要在发射数据的时候,带上msgid。
如下:
_collector.emit(stirng a,msgId);
回复

使用道具 举报

muyannian 发表于 2014-12-31 17:02:01
kanwei163 发表于 2014-12-31 16:03
bolt会重发么?还是spout会重发?多谢





查找资料网上是这么说的,有待确认

Storm保证每一个数据都得到有效处理,这是如何保证的呢?正是ack及fail机制确保数据都得到处理的保证,但是storm只是提供给我们一个接口,而具体的方法得由我们自己来实现。例如在spout下一个拓扑节点的bolt上,我们定义某种情况下为数据处理失败,则调用fail,则我们可以在fail方法中进行数据重发,这样就保证了数据都得到了处理。其实,通过读storm的源码,里面有讲到,有些类(BaseBasicBolt?)是会自动调用ack和fail的,不需要我们程序员去ack和fail,但是其他Bolt就没有这种功能了。




回复

使用道具 举报

muyannian 发表于 2014-12-31 17:17:01
muyannian 发表于 2014-12-31 17:02
查找资料网上是这么说的,有待确认


参考的
这篇文章不错,推荐:
Storm实战常见问题及解决方案

回复

使用道具 举报

nettman 发表于 2015-1-4 08:42:46
kanwei163 发表于 2014-12-31 16:03
bolt会重发么?还是spout会重发?多谢
重发的是第一个spout,其它的pout、bolt不会重发。

回复

使用道具 举报

kanwei163 发表于 2015-1-4 08:53:57
nettman 发表于 2015-1-4 08:42
重发的是第一个spout,其它的pout、bolt不会重发。

哦了,我也觉得是这样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条