转自:http://blog.csdn.net/colorant/article/details/8256039

更多云计算相关项目快速理解文档  http://blog.csdn.net/colorant/article/details/8255910

== 是什么 ==

目标Scope(解决什么问题)

分布式实时大规模数据流的处理

官方定义

Stormis a distributed realtime computation system,Storm exposes a set of primitives for doing realtime computation

个人理解

Storm所说的Realtime,个人理解不是强调批量数据处理的快速和随机性,而更多的是强调对实时数据流的连续处理(Stream),相对的概念是HadoopMapReduce框架的Batch处理模式,是一个分布式的Stream模式的数据处理框架。

== 实现 ==

Feature

continuous processon data streams :连续的数据流处理,Storm之所以为Storm的根本了。

Scalable :一方面,Storm集群的大小规模的伸缩性很好,另一方面,对于一个正在运行的Topology,可以动态的改变它的并发度,动态的增减Worker,thread, task等。

Guarantees no data loss :主要体现为数据处理流程中的Ack机制,用来重新加载处理失败的数据流。

Extremely robust/ Fault-tolerant :总之就是鲁棒性,容错性好。个人理解主要是缘于Nimbus daemon 和 Supervisor daemons 是 fail-fast 和无状态的(所有的状态都保存在Zookeeper或本地磁盘中),因此Daemon可以快速的重启和恢复。

Programming language agnostic :支持多语言编程,个人理解就是使用thrift生成server/Client/Topology的各个组件的接口,可以使用多种语言去具体实现。

核心思路,架构

Storm处理数据的基本单位是Tuple,也就是一个通用的数据容器,支持一些基本数据类型和自定义类型。在Storm的Topology中流动的是由不限定数目的Tuple组成的数据流(Stream)

Tuple 数据流在Topology中传递处理,所谓的Topology实际上就是由各种数据处理节点链接成的数据处理链,和绝大多数流数据处理框架很类似,比如处理多媒体数据的Gstreamer等。 Spout节点生成Tuple数据流,各种Bolt节点处理转换并输出Tuple流。

从Cluster集群的角度来看,和多数分布式数据处理系统一样,由任务监督分配和数据处理两部分组成。NimBus Daemon负责分发任务监控状态等,Supervisor Daemon负责实际执行Topology

从结构上说,Storm提供的就是一个搭建数据处理链,协调数据流动,方便动态水平扩展集群的一个面向Stream的分布式数据处理框架。至于这个框架具体如何获取和处理Stream数据,各种Input, Output, Filter,Join,Aggregation逻辑完全取决于具体Spout和Bolt的实现。

适用领域

总体而言,Storm针对的是实时连续数据流的持续处理。其Realtime概念并不侧重于本身处理数据的效率有多高。相反,个人觉得为了其拓扑结构的灵活性,数据在多层链接的Spout和Bolt中流动的时候必然带来一定的额外数据传输开销,此外其保证数据处理鲁棒性的Ack机制也必然带来额外的性能损失。所以纯粹论数据的高效处理,不是Storm的强项。数据的连续及时处理才是Storm的强项和适用领域。常见的应用包括各种实时数据/LOG等的预处理,过滤,统计,持久化,实时状态的监控分析等

细节

可以指定各个Bolt处理节点的并发度,便于灵活调度任务

== 相关项目 ==

上下游项目

Trident

Trident实际是Storm代码的一部分,是构建在Storm框架上的一个更高Level的抽象。本质上说,就是在Storm的Stream处理模式上,用Spout和Bolt实现了一些常见的业务逻辑的支持如Join/Filter/Aggregation/Grouping等,让开发者更方便的使用Storm。

各种 spout 实现 : https://github.com/nathanmarz/storm/wiki/Spout-implementations 如何从各种外部系统获取Tuple数据流供Storm处理,当然取决于各种Spout的实现。

类似项目

S4  :http://incubator.apache.org/s4/  S4 is a general-purpose, distributed,scalable, fault-tolerant, pluggable platform that allows programmers to easilydevelop applications for processing continuous unbounded streams of data. 看起来和Storm的Scope完全一致。 从实现上看大概在集群的动态性上的支持较差,此外不支持可靠的处理数据,可能丢失事件(这个可能不能说是BUG或缺失,大概是设计思路上的不同)

Borealis: http://www.cs.brown.edu/research/borealis/public/not active any more since 2008.

== 相关文献 ==

http://storm-project.net/ 项目主页

https://github.com/nathanmarz/storm/wiki 项目文档

Design文档

https://github.com/nathanmarz/storm/wiki/Concepts 主要概念

https://github.com/nathanmarz/storm/wiki/Implementation-docs 内部实现文档

== 其它 ==

Storm的实现除了Java,还使用了Clojure这个类Lisp语言。

Storm快速理解的更多相关文章

  1. 【转】快速理解Kafka分布式消息队列框架

     from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...

  2. Spark机器学习 Day2 快速理解机器学习

    Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...

  3. 快速理解web语义化

    什么是Web语义化 Web语义化是指使用恰当语义的html标签.class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容.语义化的web页面一方面可以让机器在更少的人类干预 ...

  4. 快速理解高性能HTTP服务端的负载均衡技术原理(转)

    1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...

  5. 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...

  6. 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8

    原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象 ...

  7. [转帖]十分钟快速理解DPI和PPI,不再傻傻分不清!

    十分钟快速理解DPI和PPI,不再傻傻分不清! https://baijiahao.baidu.com/s?id=1605834796518990333&wfr=spider&for= ...

  8. 快速理解VirtualBox的四种网络连接方式

    VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-only Adapter VMWare中有三种,其实他跟VMWare 的网络连接方式都是 ...

  9. 深入浅出 1 - AI量化策略快速理解

      我们在用AI来编写量化策略过程中,主要用到了机器学习,先来从一张图直观理解什么是机器学习:人类对新问题做出有效决策依靠的是过去积累的许多经验,并对经验进行利用,而对机器来说,“经验”以“数据”方式 ...

随机推荐

  1. Nginx 的线程池与性能剖析【转载】

    正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求.为此,NGIN ...

  2. 安装配置PhoneGap开发环境(一)

    1 安装JDK 略. 2 安装Eclipse并安装ADT插件 Android的官网提供集成了Android插件的Eclipse开发环境. 眼下訪问不了,尝试百度一下其他资源. 3 安装Android  ...

  3. t:formvalid中定义callback函数

    如果dialog="true"的话       callback="@Override functionName" 调用的是当前页面的方法       call ...

  4. Wavenet运行

    作者:桂. 时间:2017-05-10  19:17:32 链接:http://www.cnblogs.com/xingshansi/p/6832219.html 一.环境 python3.5 Win ...

  5. 音频特征提取——pyAudioAnalysis工具包

    作者:桂. 时间:2017-05-04  18:31:09 链接:http://www.cnblogs.com/xingshansi/p/6806637.html 前言 语音识别等应用离不开音频特征的 ...

  6. redis实践:用户注册登录功能

    本节将使用PHP和Redis实现用户注册登录功能,下面分模块来介绍具体实现方法. 1.注册 需求描述:用户注册时需要提交邮箱.登录密码和昵称.其中邮箱是用户的唯一标识,每个用户的邮箱不能重复,但允许用 ...

  7. ps抠图

    *套索工具:简单抠图 *多边形套索工具:简单抠图 *磁性套索工具:可以自动贴着走 *快速选择工具抠图,使用方法:主要控制画笔大小. *魔术棒抠图,使用方法:主要控制容差大小 *钢笔抠图,常见商业抠图 ...

  8. HDU 4565 So Easy!(公式化简+矩阵)

    转载:http://www.klogk.com/posts/hdu4565/ 这里写的非常好,看看就知道了啊. 题意很easy.a,b,n都是正整数.求 Sn=⌈(a+b√)n⌉%m,(a−1)2&l ...

  9. javascript 图片上传缩略图预览

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  10. 【转】服务器添加新用户用ssh-key 登录,并禁用root用户 密码登录

    [转]Linux最高权限用户root,默认可以直接登录sshd.为了提高服务器的安全度,需要对它进行禁止,使得攻击者无法通过暴力破解来获取root权限.  ps: 以下内容皆非原创,只是个人的一个实践 ...