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

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

日志

storm数据健壮性之我见

已有 1195 次阅读2014-6-7 08:54 | 它又是如何做到的呢

     研究storm也有一段时间了,对storm的各种特性也有了一点点浅薄的认识,在此写出来给兄弟伙分享分享,如有不对的地方还望兄弟伙们不吝指教。

    storm号称可以让spout出来的每一个消息都能得到有效的处理,不会出现消息丢失的情况,它又是如何做到的呢,详细信息可以参考原文( http://storm.incubator.apache.org/documentation/Guaranteeing-message-processing.html)。

storm在数据处理上给予的保证就是能让Spout出来的每个消息都得到有效的处理。但是storm所谓的有效处理(个人理解和实践),并非是指在发生错误时自动再次发射数据,而是通过'ack'和'fail'两个方法来通知'spout'。真正该如何处理数据还是需要在spout内部做处理。我看github上的kafkaspout的实现也是这么做的。

     另外,要让storm监控消息流的处理过程需要做到两点:
1、'spout'发射消息时需要指定消息的id,这样storm就知道跟踪这种消息。如下:

2、如果'bolt'需要发射消息,则需要带上当前消息的tuple用来做anchor使用。这样storm才知道跟踪后续的消息。

需要特别注意的就是:
1、从spout出来的消息,必须每个后续消息都成功的ack了,spout才会认为消息成功处理了(spout的ack方法才会触发)。如果有某个消息不ack那么storm就会在消息处理超时(通过调用"config.setMessageTimeoutSecs(10);"设置超时)的情况下调用spout的fail方法。
2、从spout消息流出的消息,只要有任何一个消息调用了fail方法,都会触发spout的fail方法(而且对于每条从spout出来消息,spout的fail方法都只会被触发一次)。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

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

关闭

推荐上一条 /2 下一条