storm中的ack-fail机制详解

一.ack-fail机制

storm处理消息时,一秒钟可能有成千上万个tuple.有一个tuple失败整个过程就失败了.所以为了确保消息不丢失.知道是那个tuple环节出了问题,storm提供了ack-fail机制.而如果tuple出了问题,需要数据,所以传过来了就将数据缓存,以便fail方法调用.成功了就移除数据.释放资源.

1.需要ackfail时,请为每个tuple生成一个messageID,这个messageId是用来标识你关系的tuple,当这个tuple被完全处理时,storm框架会调用Spout的ack 方法,否则调用fail.至于消息是否重发,完全由自己处理
MySpout{
private Map buffer = new HashMap();
spout.open()
spout.nextTuple(){
collector.emit()
buffer.put(msgId,messValue)
}
spout.outputFields()
spout.ack(msgId){
//消息移除
buffer.remove(msgId);
}
spout.fail(){
//消息重发
String messValue = buffer.get(msgId)
collector.emit();
}
}
MyBolt{
bolt.execute(){
//先判断消息是否被处理过 (开启ack-fail)
//在redis或mysql中保存一个处理过的消息列表
//需要手动的调用ack方法
collector.ack(tuple);
}
}

2.在spout有并发度的情况下,storm会根据t

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值