基础部分
在过去的数十年中,数据处理领域有着重大的变革。MapReduce和Hadoop以及相关技术使得存储和处理过去无法想象的规模的数据。不幸的是,这些数据处理技术并不是实时性的,也没有把Hadoop改造成实时数据处理的系统;实时数据处理相对于普通的批处理有基本的不同和需求。
然而,实时的对大规模的数据处理已经是现代诸多业务迫切需要的了,缺少实时性的Hadoop日益成为实时处理生态的查克琉斯之踵。
这个时候,Storm来了。
在Storm之前,我们需要手工来构建一个网络队列和执行单元来进行实时处理。执行单元要处理队列里面的消息,更新DB,然后将处理完的消息发送至其他队列以供以后的处理。不幸的是,这种方式有严重的限制:
1,冗余:我们要花大部分的时间来配置消息的去向、部署执行单元、部署队列之间的消息流动。这样以来实时处理逻辑成为了我们所有工作的很小的一部分。
2,脆弱:容错性很低,执行单元和队列任务消息必须由我们自己保证。
3,可扩展性很差:当消息对于单一的执行单元和队列累积过多的时候,我们就需要将数据分区处理。这个时候我们又需要重新配置新的执行单元和消息流向,而新的部分将有可能会失败。
尽管队列和执行单元对于大量消息处理的时候可能会失败,消息处理显然是实时计算的基础部分。问题是:我们怎么样草能做到不丢失数据,对大规模消息处理的时候扩展性好,并且容易操作呢?
Storm是用来干这事的。
为什么Storm是重要的
Storm提供了用于实时计算的一个集合的基元。类似于MapReduce大大简化了并行批处理,Storm大大简化了并行实时计算。
Storm的关键特性:
1,极其广泛的应用范围:Storm可以用来处理消息和更新DB(流式处理),对数据流的持续查询然后将结果数据流返回给客户端(持续计算),并行处理巨大的查询(分布式RPC),Storm的这些特性满足很多种应用场景。
2,可伸缩性:Storm扩展起来可以每秒处理大量的消息。扩展成为拓扑结构,我们需要做的只是增加机器,增加拓扑结构的并行机制配置。一个Storm扩展的例子,初始的时候应用有10个节点,每秒能够处理100万个消息,包括拓扑结构每秒数百次的DB操作。Storm借助ZK对集群进行协调,使得扩展集群的大小很容易。
3,保证无数据丢失:一个实时系统必须要保证数据消息被成功的处理。对于删除数据的系统来说应用范围比较窄。Storm保证每个消息都被处理,这个可以和S4系统进行对比。
4,极其健壮:不像Hadoop系统,难以管理这点是臭名昭著的,而Storm不是这样的,它可以很好的工作。为了能够让Storm项目对于用户来说有更好的用户体验,这也是Storm致力于做的一点。
5,容错性:如果在执行计算的时候出现错误,Storm将会重新调度任务,Storm可以保证计算一直进行,除非我们将它kill掉。
6,支持语言多:强健和易伸缩实时处理系统不应该受限于平台。Storm拓扑和处理组件可以使用任何语言来定义和操作。
Read full article from 一分钟了解Storm
No comments:
Post a Comment