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来编写量化策略过程中,主要用到了机器学习,先来从一张图直观理解什么是机器学习:人类对新问题做出有效决策依靠的是过去积累的许多经验,并对经验进行利用,而对机器来说,“经验”以“数据”方式 ...
随机推荐
- 基于Vuejs实现 Skeleton Loading 骨架图
原文地址:https://cloud.tencent.com/developer/article/1006169 https://mp.weixin.qq.com/s/qmyn6mGrO6hRKuvK ...
- SpringBoot进阶
一.表单验证 二.AOP处理请求 AOP是一种编程范式.与语言无关,是一种程序设计思想. 面向过程到面向对象.换个角度看世界,换个姿势处理问题. 2.1AOP实例-http请求 MAVEN添加依赖:o ...
- Java:集合,Collection接口框架图
Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...
- Dubbo 基础介绍
1.学习背景 随着互联网的发展,越来越多的企业每天处理着上亿级的请求,以及每秒几万的并发操作,对于传统的 JavaWeb 工程师是一个巨大的挑战.然而越来越复杂的业务以及数据库设计使得代码变得非常庞大 ...
- iOS之Sqlite3封装
一.代码下载 代码下载地址 二.实例效果展示 imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="效果图二.png&q ...
- 找不到编译动态表达式所需的一种或多种类型。是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?
提示“找不到编译动态表达式所需的一种或多种类型.是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用? ”错误 解决方法: 将引入的COM对象(misc ...
- jQuery.extend()中的布尔值的作用
jQuery.extend()中,第一个参数可以添加一个布尔值,表示是否深层拷贝,默认是false.但如果设置为true,则表示深层拷贝. 下面来看看什么是深层拷贝: <script type= ...
- 08、通过自定义依赖属性,用 StateTrigger 修改全局主题样式
在 Win 10 的 UWP 中,需要在 xaml 中,通过使用 StateTrigger 修改全局的文本大小.Background.画刷等依赖属性等主题样式.下面只针对字体大小进行描述,其它依赖属性 ...
- Ubuntu下如何解压缩zip,tar,tar.gz,tar.bz2文件
转自:http://wangli-5665.diandian.com/post/2011-08-18/4039228 这么多年来,数据压缩对我们来说是非常有用的.无论是在邮件中发送的图片用的zip文件 ...
- 推荐2个干净的PE
1,微PE(之前著名的通用PE.绝对PE都出自该作者) 官网:http://www.wepe.com.cn/ 2,金狐维护盘 官网:http://www.jinhu.me/