文档章节

Storm【技术文档】 - Storm的Acker机制

止静
 止静
发布于 2014/06/23 09:17
字数 901
阅读 1.4K
收藏 2


基本概念的解析

对于Storm,有一个相对比较重要的概念就是 "Guarantee no data loss" -- 可靠性

很明显,要做到这个特性,必须要tracker 每一个data的去向和结果,Storm是如何做到的

-》 那就是我们接下来要说的 Acker 机制,先概括下Acker所参与的工作流程


1 Spout 创建一个新的Tuple时候,会发射一个消息通知acker去跟踪;

2 Bolt 在处理Tuple成功或者失败的时候,也会发送一个消息通知Acker

3 Acker会好到发射该Tuple的Spout,回掉其Ack ,fail方法


一个tuple被完全处理的意思是:

这个tuple以及由这个tuple后续所导致的所有tuple 都被成功的处理, 而一个tuple会被认为处理失败了,如果这个

消息在timeout所指定的时间内没有成功处理


也就是说对于任何一个Spout-tuple以及它的子孙,到底处理成功失败与否,我们都会得到通知

由一个tuple产生一个新的tuple称为:anchoring,你发射一个tuple的同时也就完成了一次anchoring


Storm 里面有一类特殊的task称为:acker,请注意,Acker也是属于一种task,如果您对Task还不够熟悉,请参考另外的一篇文档:有关Storm-executor-task的关系,acker负责跟踪spout发出的每一个tuple的tuple树,当Acker发现一个tuple树已经处理完成了,它就会发送一个消息给产生这个tuple的task。


Acker task 组件来设置一个topology里面的acker的数量,默认值是一,如果你的topoogy里面的tuple比较多的话,那么请把acker的数量设置多一点,效率会更高一点。


理解Storm的可靠性的办法是看看 tuple,tuple树的生命周期,当一个tuple被创建,不管是Spout 和bolt 创建的,他被赋予一个位的ID,而acker就是利用这个ID 去跟踪所有的tuple的。每一个tuple知他祖宗的iD,吐过Stomr检测到一个tuple被完全处理了,那么Storm会以最开始的那个message-id 作为参数去调用消息源头的ACk方法,反之Storm会调用Spout的fail方法,


值得注意的一点是Storm调用Ack或则fail的task始终是产生这个tuple的那个task,所以如果一个Spout,被分为很多个task来执行,消息执行的成功失败与否始终会通知最开始发出tuple的那个task


Storm的可靠性产景

作为Storm的使用者,有两件事情要做以更好的利用Storm的可靠性特征,首先你在生成一个tuple的时候要通知Storm,其次,完全处理一个tuple之后要通知Storm,这样Storm就可以检测到整个tuple树有没有完成处理,并且通知源Spout处理结果


1  由于对应的task挂掉了,一个tuple没有被Ack:

    Storm的超时机制在超时之后会把这个tuple标记为失败,从而可以重新处理


2 Acker挂掉了: 在这种情况下,由这个Acker所跟踪的所有spout tuple都会出现超时,也会被重新的处理


3 Spout 挂掉了:在这种情况下给Spout发送消息的消息源负责重新发送这些消息


三个基本的机制,保证了Storm的完全分布式,可伸缩的并且高度容错的。










© 著作权归作者所有

止静
粉丝 122
博文 134
码字总数 125762
作品 0
东城
技术主管
私信 提问
加载中

评论(0)

storm入门 第四章 消息的可靠处理

4.1 简介 storm可以确保spout发送出来的每个消息都会被完整的处理。本章将会描述storm体系是如何达到这个目标的,并将会详述开发者应该如何使用storm的这些机制来实现数据的可靠处理。 4.2 ...

坏坏一笑
2014/12/03
44
0
大数据处理 Hadoop、HBase、ElasticSearch、Storm、Kafka、Spark

场景 伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。举个搜索场景中的例子,当一个卖家发布了一条...

江河海流
2014/03/30
5.1K
0
storm 原理简介及单机版安装指南

本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial Storm是一个分布式的、高容错的实时计算系统。 Storm对于实时计算的的意义相当于Hadoop对于批处理的意义。Hadoop为我们提供...

大数据之路
2013/07/28
1.7W
5
Storm【配置项】 - 详细解释

配置项 配置说明 storm.zookeeper.servers ZooKeeper服务器列表 storm.zookeeper.port ZooKeeper连接端口 storm.local.dir storm使用的本地文件系统目录(必须存在并且storm进程可读写) storm...

止静
2014/09/03
7.5K
0
Storm笔记整理(五):可靠性分析、定时任务与Storm UI参数详解

[TOC] 特别说明:前面的四篇Storm笔记中,关于计算总和的例子中的spout,使用了死循环的逻辑,实际上这样做是不正确的,原因很简单,Storm提供给我们的API中,nextTuple方法就是循环执行了,...

xpleaf
2018/04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

做了几年程序员,某天居然发现自己没学过数据结构。。。

原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 简介 学习编程,数据结构是你必须要掌握的基础知识,那么数据结构到底是什么呢? 根据百度百科的介绍,数据结构是计算机存...

黄小斜
15分钟前
28
0
正则表达式:删除包含“帮助”等的行

我有一个很长的命令文件。 使用Notepad ++或regex,我想删除所有包含“help”的行,包括keyboard_help等。 如何才能做到这一点? #1楼 在Notepad ++中执行此操作的另一种方法是在“查找/替换...

javail
17分钟前
32
0
百度飞桨口罩人脸检测与识别模型再升级,视频教学带你实战

自百度开源业界首个口罩人脸检测及分类模型之后,开发者社区进行了充分讨论并提出了该模型存在的一些问题和不足。在本文中,百度飞桨官方对这些反馈积极回应,同时提出四大升级方案,为开发者...

飞桨PaddlePaddle
24分钟前
26
0
2020教你如何更好地学习Java

学习是需要规划时间的,对于自学来说,需要有一个学习路线,因为大部分的人都是从零基础进行学习的,所以我建议大家一定要跟着大纲走,不然非常容易走偏。 首先放大纲 1.制定一个学习计划,没...

即将秃头的Java程序员
41分钟前
41
0
作为一名程序员找到一份java的工作需要学习哪些知识?

首先是Javase作为Java最基本的学习内容,不在多说。 然后是掌握JavaScript的基本原理,因为做Java编程开发必须学会JavaScript,用到JavaScript非常多,但是现在很多公司是不用去写原生的Jav...

Java天天
46分钟前
49
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部