为什么选择Twitter Storm?

2019-03-02 23:53|来源: 网路

Rationale

在过去的十年里,数据处理发生了革命性的变化。MapReduce,Hadoop,以及相关的技术使我们可以存储和处理以前不可想象规模的数据。很遗憾,这些数据处理系统都不是实时系统,命中注定也不是它们。根本没办法把Hadoop变成一个实时系统;实时数据处理和批处理的许多要求在根本上有很大不同。

 

然而,企业对大规模实时数据处理要求越来越多。缺乏“实时Hadoop”是数据处理生态系统中最大的窘境。

 

Storm解决了这个窘境。

 

Storm之前,你通常必须手动建立一个由许多队列和许多worker组成的网络来实现实时处理。worker处理队列消息,更新数据库,发送新消息给其它队列以供后续处理。很遗憾,这种方法有很大的局限性。

 

乏味:你大部份开发时间花费在配置消息发送,部署worker,部署中间队列。你关心的实时处理逻辑对应到你的代码的比例相对较小 。

 

脆弱:没有多少容错。你负责保持每个worker和队列正常工作。

 

痛苦伸缩:当单个worker或队列的消息吞吐量太高时,你需要分区,即数据如何分散。你需要重新配置其它worker,让它们发送消息到新位置。这导致删除或添加部件都可能失败。

 

虽然队列+workers的范式能解决大量的消息,消息处理显然是实时计算的基本范式。问题是:你要怎么做,才能在某种程度上保证数据不会丢失,对海量消息轻松扩容,并且使用和运营工作都超级简单呢?

 

Storm满足这些目标。

 

Storm如此重要,为什么?

 

Storm公开(expose)一组实时计算原语。类似MapReduce极大地简化了编写并行批处理程序,storm的原语极大地简化了编写并行实时计算程序。

 

Storm的关键特性:

 

用例非常广泛:Storm可用于处理消息和更新数据库(流处理),在数据流上进行持续查询,并以流的形式返回结果到客户端(持续计算),并行化一个类似实时查询的热点查询(分布式的RPC),还有更多的用例。Storm的一组很小的原语满足了惊人数量的用例。

 

可伸缩:Storm随时都可对大规模消息进行扩容。扩容一个拓扑,你只需要添加机器和增加的拓扑结构的并行设置。看一个storm规模的例子,一个storm集群有10个节点,一个最初的Storm应用每秒可以处理1,000,000个消息(指spout和bolt总共发射的消息总和),拓扑的其中一部分每秒数有数百个数据库调用。Storm使用Zookeeper协调集群,使其集群可以扩容到非常大。

 

保证数据不丢失:实时系统必须对成功处理数据提供有力保证 。系统丢弃数据的用例非常有限。Storm保证每个消息都被处理,这直接与其它系统截然不同,如S4。

 

非常健壮:Storm与Hadoop不同,Hadoop难于管理早已臭名昭著,Storm集群只是干活。使用户尽可能方便地管理storm集群是storm项目的一个明确目标。

 

容错:计算的执行过程中如果发生故障,Storm将在必要时重新分配任务。Storm确保计算永远运行(或者直到你kill此计算) 。

 

编程语言无关性:健壮和可伸缩的实时处理不应仅限于一个单一的平台。Storm的拓扑结构和处理组件可以用任何语言定义,对任何人而言,Storm都是易接受的。

 

英文:https://github.com/nathanmarz/storm/wiki/Rationale

 


转自:http://www.cnblogs.com/cnchenlx/archive/2012/03/07/2383429

相关问答

更多
  • 当下雨的时候,风暴都到了
  • Storm是什么文件[2023-06-19]

    Storm译为汉语即‘暴风雨’、“暴风雪”,是暴风影音软件的英文名,是一种媒体播放器。   Storm还是一个分布式的、容错的实时计算系统,由BackType开发,广泛用于进行实时日志处理,实时统计、实时风控、实时推荐等场景中,目前最新版本是Storm 0.8.0。   Storm还是外文歌曲的名字,具体可在百度音乐中搜索。
  • 一些想法以及我迄今为止进行类似实验的经验(在Sprint期间在Spike中完成): 根据我的经验(我可能是错的),随着需求的增加,您不会真正旋转更多的螺栓,而是调整拓扑中每个螺栓的平行度配置。 拓扑不会通过增加更多的螺栓来缩放,而是通过增加平行度来扩展螺栓的瓶颈。 以示例字数问题为例: builder.setBolt(4, new MyBolt(), 12) .shuffleGrouping(1) .shuffleGrouping(2) .fieldsGrouping(3, new ...
  • 回答你的问题有点难,因为Zookeeper,Maven和Nginx都做了很多不同的事情,但我会尽我所能。 Zookeeper是运行Storm的一部分。 它会跟踪通过Storm拓扑运行的当前事务。 Maven是JVM生态系统中常见的构建管理工具。 你需要这个来构建东西。 在某些情况下,Nginx可能会使用Storm拓扑,但对于所有用例来说肯定不是必需的或共同的。 因此,您可能需要项目中的所有三个,您肯定需要Zookeeper,并且几乎肯定会以某种方式与Maven交互,即使您在其他地方使用Ant或Leineng ...
  • 免责声明:我写了您在上述问题中引用的文章 。 但是,我对“任务”的概念有些困惑。 任务是组件的运行实例(spout还是螺栓)? 执行者有多个任务实际上是说执行者多次执行相同的组件,我是否正确? 是的,是的。 此外,在一般的并行性意义上,Storm将为一个喷口或螺栓生成一个专用的线程(执行器),但是由具有多个任务的执行器(线程)对并行性的贡献是什么? 每个执行器运行多个任务不会增加并行级别 - 执行程序总是有一个线程用于其所有任务,这意味着任务在执行程序上连续运行。 正如我在文章中写道,请注意: 在拓扑开始后 ...
  • 我建议在设计螺栓时遵循Unix的理念:“做一件事,做得好”。 螺栓'A'过滤数据。 Bolt'B'将螺栓'A'的输出转换为DBObject并将其保存到MongoDB。 这样,您可以保持拓扑简单。 每个螺栓都有简单而专注的责任。 如果出现故障,您确切知道问题所在。 当然,你可以告诉Storm每个螺栓需要多少并行化。 我认为你不需要任何特殊的抽象(三叉戟或交易)。 常规的Storm拓扑为您提供良好的服务。 顺便说一句,Storm文档很棒! I would suggest to follow the philos ...
  • 您的问题的根本原因是您正在向您的风暴配置添加ProducerTemplate,并且它正在抛出异常,因为它不可序列化。 如果那是你自己的类,你可以改变代码使其工作,但由于这是一个Camel类,我会推荐一种不同的方法。 WebSocketBolt:将您的producerTemplate私有成员更改为transient: private transient ProducerTemplate producerTemplate; 这样就不会尝试序列化(将其置于conf中也会遇到同样的问题)。 WebSocketBol ...
  • 我最终通过使用maven repo中预编译的storm-kafka版本并在拓扑中添加过滤器螺栓而不是在spout本身中进行过滤来解决这个问题。 从而消除了对storm-core和storm-kafka本地编译的jar文件的需求。 这不是一个“解决方案”,但它是解决问题的一种方法。 I eventually worked around this problem by using a pre-compiled version of storm-kafka from a maven repo and adding ...
  • 我已经浏览了ptgoetz的Storm JMS示例,并提出了一个解决方案,可以直接将主题数据提供给spout。 需要在jms-activemq.xml中指定主题
    我从来没有听说过DSMS一词,但是看一下维基百科上的描述,我认为Storm绝对可以说是DSMS。 来自维基百科: 它类似于数据库管理系统(DBMS)[...]但是,与DBMS相比,DSMS执行连续查询,该查询不仅执行一次,而且是永久安装的。 这听起来就像Storm一样。 但请注意,在Storm的情况下,它通常与DBMS结合使用。 例如,Storm可以提供One-time queries , unlimited secondary storage等,维基百科说这与DSMS结合时缺乏DSMS。 I had ne ...