《Storm分布式实时计算模式》——1.6 有保障机制的数据处理

1.6 有保障机制的数据处理

Storm提供了一种API能够保证spout发送出来的每个tuple都能够执行完整的处理过程。在我们上面的例子中,不担心执行失败的情况。可以看到在一个topology中一个spout的数据流会被分割生成任意多的数据流,取决于下游bolt的行为。如果发生了执行失败会怎样?举个例子,考虑一个负责将数据持久化到数据库的bolt。怎样处理数据库更新失败的情况?
1.6.1 spout的可靠性

在Storm中,可靠的消息处理机制是从spout开始的。一个提供了可靠的处理机制的spout需要记录它发射出去的tuple,当下游bolt处理tuple或者子tuple失败时spout能够重新发射。子tuple可以理解为bolt处理spout发射的原始tuple后,作为结果发射出去的tuple。另外一个视角来看,可以将spout发射的数据流看作一个tuple树的主干(如图1-6所示)。

在图中,实线部分表示从spout发射的原始主干tuple,虚线部分表示的子tuple都是源自于原始tuple。这样产生的图形叫做tuple树。在有保障数据的处理过程中,bolt每收到一个tuple,都需要向上游确认应答(ack)者报错。对主干tuple中的一个tuple,如果tuple树上的每个bolt进行了确认应答,spout会调用ack方法来标明这条消息已经完全处理了。如果树中任何一个bolt处理tuple报错,或者处理超时,spout会调用fail方法。
Storm的ISpout接口定义了三个可靠性相关的API:nextTuple,ack和fail。

前面讲过,Storm通过调用Spout的nextTuple()发送一个tuple。为实现可靠的消息处理,首先要给每个发出的tuple带上唯一的ID,并且将ID作为参数传递给SpoutOutputCollector的emit()方法:

给tuple指定ID告诉Storm系统,无论执行成功还是失败,spout都要接收tuple树上所有节点返回的通知。如果处理成功,spout的ack()方法将会对编号是ID的消息应答确认,如果执行失败或者超时,会调用fail()方法。
1.6.2 bolt的可靠性
bolt要实现可靠的消息处理机制包含两个步骤:
1.当发射衍生的tuple时,需要锚定读入的tuple
2.当处理消息成功或者失败时分别确认应答或者报错
锚定一个tuple的意思是,建立读入tuple和衍生出的tuple之间的对应关系,这样下游的bolt就可以通过应答确认、报错或超时来加入到tuple树结构中。
可以通过调用OutputCollector中emit()的一个重载函数锚定一个或者一组tuple:

这里,我们将读入的tuple和发射的新tuple锚定起来,下游的bolt就需要对输出的tuple进行确认应答或者报错。另外一个emit()方法会发射非锚定的tuple:

非锚定的tuple不会对数据流的可靠性起作用。如果一个非锚定的tuple在下游处理失败,原始的根tuple不会重新发送。
当处理完成或者发送了新tuple之后,可靠数据流中的bolt需要应答读入的tuple:

https://yqfile.alicdn.com/f567f6a8769cb4cb85f0659816df3f741650d9a2.png
" >

如果处理失败,这样的话spout必须发射tuple,bolt就要明确地对处理失败的tuple报错:

如果因为超时的原因,或者显式调用OutputCollector.fail()方法,spout都会重新发送原始tuple。后面很快有例子。
1.6.3 可靠的单词计数
为了进一步说明可控性,让我们增强SentenceSpout类,支持可靠的tuple发射方式。需要记录所有发送的tuple,并且分配一个唯一的ID。我们使用HashMap来存储已发送待确认的tuple。每当发送一个新的tuple,分配一个唯一的标识符并且存储在我们的hashmap中。当收到一个确认消息,从待确认列表中删除该tuple。如果收到报错,从新发送tuple:

为支持有保障的处理,需要修改bolt,将输出的tuple和输入的tuple锚定,并且应答确认输入的tuple:

时间: 2024-10-21 15:58:21

《Storm分布式实时计算模式》——1.6 有保障机制的数据处理的相关文章

《Storm分布式实时计算模式》——导读

前 言 目前对信息高时效性.可操作性的需求不断增长,这要求软件系统在更少的时间内能处理更多的数据.随着可连接设备数量不断增加,以及在众多行业领域广泛应用,这种信息需求已无处不在.传统企业的运营系统被迫处理原先只有互联网企业才会遇到的大规模数据.这种重大转变正不断瓦解传统架构和解决方案,传统上会将在线事务处理和离线分析分割开来.与此同时,人们正在重新勾勒从数据中提取信息的意义和价值.软件框架和基础设施也在不断进化,以适应这种新场景. 具体地说,数据的生成可以看作一连串发生的离散事件,这些事件流会伴

《Storm分布式实时计算模式》——1.3 实现单词计数topology

1.3 实现单词计数topology 前面介绍了Storm的基础概念,我们已经准备好实现一个简单的应用.现在开始着手开发一个Storm topology,并且在本地模式执行.Storm本地模式会在一个JVM实例中模拟出一个Storm集群.大大简化了用户在开发环境或者IDE中进行开发和调试.后续章节将会演示如何将本地模式下开发好的topology部署到真实的Storm集群环境.1.3.1 配置开发环境 新建一个Storm项目其实就是将Storm及其依赖的类库添加到Java classpath中.在

《Storm分布式实时计算模式》——3.6 Trident状态

3.6 Trident状态 我们现在已经给每个aggregator的分组数据进行了计数,现在想将信息进行持久化存储,以便进一步分析.在Trident中,持久化操作从状态管理开始.Trident对状态有底层的操作原语,但不同于Storm API,它不关心要哪些数据会作为状态存储或者如何存储这些状态.Trident在高层提供了下述的状态接口: 上面提到了,Trident将tuple分组成一批批数据.每批数据都有自己的事务标识符.在前面的接口中,Trident告诉State对象什么时候开始提交状态,什

《Storm分布式实时计算模式》——2.1 Storm集群的框架

第2章 配置Storm集群 在本章中你将深入理解Storm的技术栈,它的软件依赖,以及搭建和部署Storm集群的过程.我们首先会在伪分布式模式下安装Storm,所有的组件都安装在同一台机器上,而不是在多台机器上.一旦你了解了安装和配置Storm的基本步骤,我们就可以通过Puppet这个工具进行自动化的安装,这样的话部署多节点的集群可以节省大量的时间和精力. 本章包括以下内容: 组成Storm集群的不同组件和服务 Storm的技术栈 在Linux上安装和配置Storm Storm的配置参数 Sto

《Storm分布式实时计算模式》——第1章 分布式单词计数1.1 Storm topology的组成部分——stream、spout和bolt

第1章 分布式单词计数 本章将介绍使用Storm建立一个分布式流式计算应用时涉及的核心概念.我们通过建立一个简单的计数器程序实现这个目的.计数器将持续输入的一句句话作为输入流,统计其中单词出现的次数.单词计数这个例子浅显易懂,引入了多种数据结构.技术和设计模式.这些都是实现更复杂计算所必须的基础. 本章首先概要介绍Storm的数据结构,然后实现一个完整Storm程序所需的各个组成部分.读完本章,读者将会了解Storm计算的基本结构.搭建开发环境的方法.Storm程序的开发和调试技术. 本章包括以

《Storm分布式实时计算模式》——第3章 Trident和传感器数据3.1 使用场景

第3章 Trident和传感器数据 在本章中,我们将介绍Trident topology.Trident在Storm上提供了高层抽象.Trident抽象掉了事务处理和状态管理的细节.特别是,它可以让一批tuple进行离散的事务处理.此外,Trident还提供了抽象操作,允许topology在数据上执行函数功能.过滤和聚合操作.我们将使用传感器数据作为例子来更好地理解Trident.通常情况下,传感器数据流会来自不同的位置.一些传统的例子包括天气和交通状况,这种模式扩展到了更大的数据源.比如,手机

《Storm分布式实时计算模式》——1.7 总结

1.7 总结 本章中,在没有安装和搭建Storm集群的情况下,我们使用Storm的核心API建立了一个简单的分布式计算程序,覆盖了Storm特性集的大部分内容.Storm的本地模式非常强大,简化了开发,提高了开发效率.但要感受到Storm真正的威力和水平扩展性,还是需要将程序部署在真实的集群上.下一章,我们会讲如何安装和搭建Storm集群环境,以及如何将topology部署到到分布式环境中.

《Storm分布式实时计算模式》——1.4 Storm的并发机制

1.4 Storm的并发机制 在Storm的间接中提到过,Storm计算支持在多台机器上水平扩容,通过将计算切分为多个独立的tasks在集群上并发执行来实现.在Storm中,一个task可以简单地理解为在集群某节点上运行的一个spout或者bolt实例.为了理解storm的并发机制是如何运行的,我们先来解释下在集群中运行的topology的四个主要组成部分: Nodes(服务器):指配置在一个Storm集群中的服务器,会执行topology的一部分运算.一个Storm集群可以包括一个或者多个工作

《Storm分布式实时计算模式》——2.3 在Linux上安装Storm

2.3 在Linux上安装Storm Storm是设计运行在Unix兼容的操作系统上.但在0.9.1版本,它也支持在Windows机器上部署. 为了简化部署,我们使用Ubuntu 12.04LTS的发行版作为安装服务器.将会使用服务器版本,默认不包括图形界面接口,因为我们用不到..在实体机和虚拟机上安装ubuntu都是非常方便的.出于学习和开发的目的,你会发现在虚拟机里进行部署更加方便,尤其是手头没有那么多实体机的情况. OSX.Linux.Windows都有着对应的虚拟机软件.我们建议从下面集