立即注册 登录
About云-梭伦科技 返回首页

desehawk的个人空间 https://www.aboutyun.com/?29 [收藏] [复制] [分享] [RSS]

日志

topology执行流程

已有 442 次阅读2014-12-28 17:06

1. 首先storm通过调用spout的nextTuple方法来获取下一个tuple, Spout通过open方法参数里面提供的SpoutOutputCollector来发射新tuple到它的其中一个输出消息流, 发射tuple的时候spout会提供一个message-id,通过这个message-id来追踪这个tuple。接下来, 这个发射的tuple被传送到消息处理者bolt那里, storm会跟踪由此所产生的这课tuple树。如果storm检测到一个tuple被完全处理了, 那么storm会以最开始的那个message-id作为参数去调用消息源的ack方法;反之storm会调用spout的fail方法。另外,每个bolt也有ack和fail方法,每个tuple处理完都会有ack或者fail。

2. 从storm的task的角度来讲,每个tuple都有一个对应的task,是nibmus分配的(有多少个spout/bolt数,每个有多少个并行,就分配多少个task,每个task-id对应于spout或者bolt)。task的acker跟踪tuple是否被处理,成功处理后,task首先会通知祖宗的message-id(从spout发出来的那个tuple的message-id)执行成功,然后自杀释放内存。tuple树的根tuple是不ack的,都是ack其子tuple。最后留下来的就是spout的task,最后一个子tuple ack得到0(之前ack成功不一定是0,只是在timeout所指定的时间内成功处理;64位求异或,过程中碰巧为0概率忽略不计),整个流程就走完了。

3. tuple最终是被序列化之后由msg/send方法通过socket发送给指定的task(storm的nimbus指定了执行的顺序,task-id来标示),storm(具体执行是Worker)把tuple 以及这个tuple要发送的地址(task-id)组成一个对象(task-id, tuple)放进待发送队列,实现从一个bolt到另一个bolt。

4. 成功执行完就执行下一次。

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条