1.什么是storm

Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。

按照storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。Hadoop提供了map、reduce原语,使我们的批处理程序变得简单和高效。同样,Storm也为实时计算提供了一些简单高效的原语,而且Storm的Trident是基于Storm原语更高级的抽象框架,类似于基于Hadoop的Pig框架,让开发更加便利和高效。

2.storm应用场景

推荐系统(实时推荐,根据下单或加入购物车推荐相关商品)、金融系统、预警系统、网站统计(实时销量、流量统计,如淘宝双11效果图)、交通路况实时系统等等。

3.storm的一些特性

1.适用场景广泛: storm可以实时处理消息和更新DB,对一个数据量进行持续的查询并返回客户端(持续计算),对一个耗资源的查询作实时并行化的处理(分布式方法调用,即DRPC),storm的这些基础API可以满足大量的场景。

2. 可伸缩性高:  Storm的可伸缩性可以让storm每秒可以处理的消息量达到很高。扩展一个实时计算任务,你所需要做的就是加机器并且提高这个计算任务的并行度 。Storm使用ZooKeeper来协调集群内的各种配置使得Storm的集群可以很容易的扩展。

3. 保证无数据丢失: 实时系统必须保证所有的数据被成功的处理。 那些会丢失数据的系统的适用场景非常窄, 而storm保证每一条消息都会被处理, 这一点和S4相比有巨大的反差。

4. 异常健壮: storm集群非常容易管理,轮流重启节点不影响应用。

5. 容错性好:在消息处理过程中出现异常, storm会进行重试

6. 语言无关性: Storm的topology和消息处理组件(Bolt)可以用任何语言来定义, 这一点使得任何人都可以使用storm.

4.storm集群结构

Nimbus 和Supervisors 之间所有的协调工作是通过 一个Zookeeper 集群。

Nimbus进程和 Supervisors 进程是无法直接连接,并且是无状态的;  所有的状态维持在Zookeeper中或保存在本地磁盘上。

意味着你可以 kill -9 Nimbus 或Supervisors 进程,而不需要做备份。

这种设计导致storm集群具有令人难以置信的稳定性,并且无耦合。

5.storm工作原理

Nimbus 负责在集群分发的代码,topo只能在nimbus机器上提交,将任务分配给其他机器,和故障监测。

Supervisor,监听分配给它的节点,根据Nimbus 的委派在必要时启动和关闭工作进程。 每个工作进程执行topology 的一个子集。一个运行中的topology 由很多运行在很多机器上的工作进程组成。

在Storm中有对于流stream的抽象,流是一个不间断的无界的连续tuple,注意Storm在建模事件流时,把流中的事件抽象为tuple即元组

Storm认为每个stream都有一个源,也就是原始元组的源头,叫做Spout(管口)

处理stream内的tuple,抽象为Bolt,bolt可以消费任意数量的输入流,只要将流方向导向该bolt,同时它也可以发送新的流给其他bolt使用,这样一来,只要打开特定的spout再将spout中流出的tuple导向特定的bolt,bolt又对导入的流做处理后再导向其他bolt或者目的地。

可以认为spout就是水龙头,并且每个水龙头里流出的水是不同的,我们想拿到哪种水就拧开哪个水龙头,然后使用管道将水龙头的水导向到一个水处理器(bolt),水处理器处理后再使用管道导向另一个处理器或者存入容器中。

为了增大水处理效率,我们很自然就想到在同个水源处接上多个水龙头并使用多个水处理器,这样就可以提高效率。

这是一张有向无环图,Storm将这个图抽象为Topology(拓扑),Topo就是storm的Job抽象概念,一个拓扑就是一个流转换图

图中每个节点是一个spout或者bolt,每个spout或者bolt发送元组到下一级组件。

而Spout到单个Bolt有6种流分组策略。

6.Topology

Storm将流中元素抽象为tuple,一个tuple就是一个值列表value list,list中的每个value可以是任意可序列化的类型。拓扑的每个节点都要说明它所发射出的元组的字段的name,其他节点只需要订阅该name就可以接收处理。

7.storm相关概念

Streams消息流

消息流是一个没有边界的tuple序列,而这些tuples会被以一种分布式的方式并行创建和处理。 每个tuple可以包含多列,字段类型可以是: integer, long, short, byte, string, double, float, boolean和byte array。 你还可以自定义类型 — 只要你实现对应的序列化器。

Spouts消息源

Spouts是topology消息生产者。Spout从一个外部源(消息队列)读取数据向topology发出tuple。 消息源Spouts可以是可靠的也可以是不可靠的。一个可靠的消息源可以重新发射一个处理失败的tuple, 一个不可靠的消息源Spouts不会。

Spout类的方法nextTuple不断发射tuple到topology,storm在检测到一个tuple被整个topology成功处理的时候调用ack, 否则调用fail。

storm只对可靠的spout调用ack和fail。

Bolts:消息处理者

消息处理逻辑被封装在bolts里面,Bolts可以做很多事情: 过滤, 聚合, 查询数据库等。

Bolts可以简单的做消息流的传递。复杂的消息流处理往往需要很多步骤, 从而也就需要经过很多Bolts。第一级Bolt的输出可以作为下一级Bolt的输入。而Spout不能有一级。

Bolts的主要方法是execute(死循环)连续处理传入的tuple,成功处理完每一个tuple调用OutputCollector的ack方法,以通知storm这个tuple被处理完成了。当处理失败时,可以调fail方法通知Spout端可以重新发送该tuple。

流程是: Bolts处理一个输入tuple, 然后调用ack通知storm自己已经处理过这个tuple了。storm提供了一个IBasicBolt会自动调用ack。

Bolts使用OutputCollector来发射tuple到下一级Blot。

一组形象的对比:

storm简介、原理、概念相关推荐

  1. 流处理框架Storm简介

    转自:http://qing.weibo.com/2294942122/88ca09aa33002dsh.html EMC中国研究院 向东 提起Big Data,人们往往会提起大数据的4个V: Vol ...

  2. storm - 简介

    一 Storm简介                  Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架,它原来是由BackType开发,后BackType被Twitter收购, ...

  3. HTTP 和 DNS 原理概念了解 ;

    一 . HTTP 原理概念介绍  : 用户访问网站的原理过程是什么样~~~~ 01. DNS域名解析,获悉域名对应IP地址 02. 根据IP地址访问网站服务器,TCP三次握手过程 03. 用户向网站服 ...

  4. storm显微镜成像原理_生命科学与医学领域概述:知微见著-超高分辨率显微镜STORM...

    原标题:生命科学与医学领域概述:知微见著-超高分辨率显微镜STORM 超高分辨率 显微镜STORM 正文 前言: 我们知道,在生命科学领域中最常用的光学显微镜,是用可见光来观察生物样品.而光是一种横波 ...

  5. 流数据分析平台Storm简介

    流数据分析平台Storm简介 Storm是一个分布式的.容错的实时流计算系统,可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm之于实时处理,就好比Hadoop之于批处理.Storm保证 ...

  6. RxJava RxPermissions 动态权限 简介 原理 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. DL之LSTM:LSTM算法论文简介(原理、关键步骤、RNN/LSTM/GRU比较、单层和多层的LSTM)、案例应用之详细攻略

    DL之LSTM:LSTM算法论文简介(原理.关键步骤.RNN/LSTM/GRU比较.单层和多层的LSTM).案例应用之详细攻略 目录 LSTM算法简介 1.LSTM算法论文 1.1.LSTM算法相关论 ...

  8. [crypto]-02-非对称加解密RSA原理概念详解

    说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创. 算法原理介绍 step 说明 描述 备注 1 找出质数 P .Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) ...

  9. [crypto]-01-对称加解密AES原理概念详解

    1.对称加解密 术语:P是明文,C是密文,K是密钥,E是加密算法,D是解密算 (1).常用的对称加解密有哪些? (2).加解密的模式 [ecb]这种模式是将整个明文分成若干段相同的小段,然后对每一小段 ...

最新文章

  1. Acronis Disk Director 10 硬盘操作详细教程(三)分区表修复
  2. 彻底理解cookie,session,localStorage(附代码)
  3. 四十五、爬取QQ音乐Lemon 日语歌的评论
  4. Windows 下 MySQL-python 的安装
  5. Spring 定时任务 注解版
  6. linux启动mysql_Linux服务器安装Mysql教程
  7. java中如何生成随机数?
  8. nginx 电子书_13本免费的电子书,拿走,不谢
  9. python是语言还是软件_程序开发语言之Python:是追逐还是坚守?
  10. 大整数乘法——分治算法的时间复杂度
  11. W3School-CSS 字体(font)实例
  12. android模仿微信浮窗,Android仿微信视屏悬浮窗效果
  13. 10家不错的iphone编程资源站
  14. 移除map中的键值对
  15. 【MySQL】这是我见过最有用的MySQL数据类型面试题,面了无数家总结的
  16. win7旗舰版安装telnet,报错:打开程序包 Telnet Client 的更新 TelnetClient 失败。状态为: 0x80073712。解决方案
  17. 3.暴力破解凯撒密码
  18. 价格时序预测-LSTM
  19. Ansible(未完待续)
  20. 数码管显示数字(滚动和静态)

热门文章

  1. 基于MPLS ×××城域网的设计(下篇
  2. Spring Boot中声明式数据库事务使用与理解
  3. oracle tns12560错误,TNS 12560 错误解决办法
  4. nodejs实现QQ邮件发送
  5. 扫地机器人排行榜 扫地机器人哪个牌子好?
  6. Binder IPC
  7. 解决.NET 调用 SAP RFC函数时报 Lookup of function XXX metadata failed for destination Conn 错误
  8. OS X自带数码测色计的使用
  9. 抗积分饱和 PID代码实现,matlab仿真实现
  10. Python字符串与字节串的相互转换