Storm快速理解
转自: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快速理解的更多相关文章
- 【转】快速理解Kafka分布式消息队列框架
from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...
- Spark机器学习 Day2 快速理解机器学习
Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...
- 快速理解web语义化
什么是Web语义化 Web语义化是指使用恰当语义的html标签.class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容.语义化的web页面一方面可以让机器在更少的人类干预 ...
- 快速理解高性能HTTP服务端的负载均衡技术原理(转)
1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...
- 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...
- 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8
原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象 ...
- [转帖]十分钟快速理解DPI和PPI,不再傻傻分不清!
十分钟快速理解DPI和PPI,不再傻傻分不清! https://baijiahao.baidu.com/s?id=1605834796518990333&wfr=spider&for= ...
- 快速理解VirtualBox的四种网络连接方式
VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-only Adapter VMWare中有三种,其实他跟VMWare 的网络连接方式都是 ...
- 深入浅出 1 - AI量化策略快速理解
我们在用AI来编写量化策略过程中,主要用到了机器学习,先来从一张图直观理解什么是机器学习:人类对新问题做出有效决策依靠的是过去积累的许多经验,并对经验进行利用,而对机器来说,“经验”以“数据”方式 ...
随机推荐
- 消息队列实现回射客户/服务器和 msgsnd、msgrcv 函数
一.msgsnd 和 msgrcv 函数 #include <sys/types.h> #include <sys/ipc.h> #include <sys/ms ...
- golang(5)使用beego 开发 api server 和前端同学拆分开发,使用swagger
1,beego api Swagger 是一个规范和完整的框架,用于生成.描写叙述.调用和可视化 RESTful 风格的 Web 服务.整体目标是使client和文件系统作为服务器以相同的速度来更新. ...
- 如何理解Latency和Throughput: 吞吐量和延迟
Latency,中文译作延迟.Throughput,中文译作吞吐量.它们是衡量软件系统的最常见的两个指标. 延迟一般包括单向延迟(One-way Latency)和往返延迟(Round Trip La ...
- 分享五:php数组操作
一:PHP中array_merge和array相加的区别分析 1:键名是string: <?php $arr1 = array('a'=>'PHP'); $arr2 = array('a' ...
- 在C#中使用WMI查询进程的用户信息
这是一个使用WMI查询信息的例子.看之前请对WMI有一个简单的了解,可以百度,或者查看我上一篇:WMI测试器 主要代码:(需要添加对System.Management的引用) //创建Win32_Pr ...
- Java学习笔记----main
1.java中main方法是程序的入口方法.main还是必须的两个修饰符是public和static.举例 A:public static void main(String args[]) B:pub ...
- [k8s]kube-router替代kube-proxy实现svc网络和pod网络
本文讲解了kube-router部署,无需在部署kube-proxy了. kube-router采用lvs实现svc网络,采用bgp实现pod网络. kube-router也是基于cni网络,本文是容 ...
- %02x和%2x区别
%02x (x代表以十六进制形式输出,02代表不足两位,前面补0输出,如果超过两位,则以实际输出) 例: #include <stdio.h> #include <stdint.h ...
- AngularJS实现跨域请求
跨域,前端开发中经常遇到的问题,AngularJS实现跨域方式类似于Ajax,使用CORS机制. 下面阐述一下AngularJS中使用$http实现跨域请求数据. AngularJS XMLHttpR ...
- Spring Boot干货系列:(三)启动原理解析
Spring Boot干货系列:(三)启动原理解析 2017-03-13 嘟嘟MD 嘟爷java超神学堂 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说 ...