文档章节

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

止静
 止静
发布于 2014/06/23 09:17
字数 901
阅读 674
收藏 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
东城
技术主管
私信 提问
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

没有更多内容

加载失败,请刷新页面

加载更多

应急广播户户通平台

一、平台概述 应急广播户户通平台为软硬一体化广播服务解决方案。实现了应急广播、视音频及图片文字信息、调频及数字广播FM、天气预报信息接收功能,以及视音频播放、智能机器人、电子日历等...

neocean
58分钟前
47
0
如何为Apache 2.2启用mod_rewrite

我已经在我的Vista机器上安装了新的Apache 2.2,一切正常,除了mod重写。 我没有注释 LoadModule rewrite_module modules/mod_rewrite.s 但是我的重写规则都没有,即使是简单的重写规则 Re...

javail
今天
23
0
移除Python unicode字符串中的重音符号的最佳方法是什么?

我在Python中有一个Unicode字符串,我想删除所有的重音符号(变音符号)。 我在网上发现了一种用Java实现此目的的优雅方法: 将Unicode字符串转换为长规范化格式(带有单独的字母和变音符号)...

技术盛宴
今天
48
0
ActiveMQ学习之SpringBoot整合ActiveMQ------>主题生产者和消费者

一、pom <!--聚合工程集成关系--> <!--统一整合第三方框架依赖信息--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</a......

冥焱
今天
89
0
两周自制脚本语言-第11天 优化变量读写性能

第11天 优化变量读写性能 以变量值的读写为例,向读者介绍基于这种理念的语言处理器性能优化方式。 11.1 通过简单数组来实现环境 假如函数包含局部变量x与y,程序可以事先将x设为数组的第0个...

果汁分你一半
今天
58
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部