不多说,直接上干货!

storm的特性

  Storm 是一个开源的分布式实时计算系统,可以简单、可靠地处理大量的数据流。 Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个节点每秒可以处理数以百万计的消息)。 Storm 的部署和运维都很便捷,而且更为重要的是,可以使用任意编程语言来开发应用。

下面介绍 Storm 的特点
(1)编程模型简单
  在大数据处理方面, Hadoop 为开发者提供了 MapReduce 原语,使并行批处理程序变得非常简单和优美。同样, Storm 也为大数据的实时计算提供了一些简单优美的原语,这大大降低了开发并行实时处理任务的复杂性,可以快速、高效地开发应用。

(2)可扩展

  在 Storm 集群中真正运行 Topology 的主要有 3 个实体:工作进程、线程和任务。 Storm集群中的每台机器都可以运行多个工作进程,每个工作进程又可创建多个线程,每个线程可以执行多个任务,任务是真正进行数据处理的实体,开发的 Spout、 Bolt 就是作为一个或者多个任务的方式执行的。因此,计算任务在多个线程、进程和服务器之间并行进行,支持灵活的水平扩展。

(3)高可靠性
  Storm 可以保证 Spout 发出的每条消息都能被“完全处理”,这也是直接区别于其他实时系统的地方,如 S4。

注意:

  Spout 发出的消息后续可能会触发产生成千上万条消息,可以形象地理解为一棵消息树,其中 Spout 发出的消息为树根, Storm 会跟踪这棵消息树的处理情况,只有当这棵消息树中的所有消息都被处理了,Storm 才会认为 Spout 发出的这个消息已经被“完全处理”。如果这棵消息树中的任何一个消息处理失败了,或者整棵消息树在限定的时间内没有“完全处理”,那么 Spout 发出的消息就会重发。

  考虑到尽可能减少内存的消耗, Storm 并不会跟踪消息树中的每个消息,而是采用了一些特殊的策略,它把消息树当作一个整体来跟踪,对消息树中所有消息的唯一 ID 进行异或计算,通过是否为 0 来判定 Spout 发出的消息是否被“完全处理”,这极大地节约了内存并简化了判定逻辑,后面会详细介绍这种机制。
  在这种模式下,每发送一个消息,都会同步发送一个 ack/fail,对于网络的带宽会有一定的消耗,如果对可靠性要求不高,则可使用不同的 emit 接口关闭该模式。
  上面所说的, Storm 保证了每个消息至少被处理一次,但是对于有些计算场合,会严格要求每个消息只被处理一次, Storm 的 0.7.0 引入了事务性拓扑,解决了这个问题,后面章节会详述。

(4)高容错性
  如果在消息处理过程中出了一些异常, Storm 会重新安排这个出问题的处理单元。 Storm保证一个处理单元永远运行(除非显式杀掉该处理单元)。当然,如果处理单元中存储了中间状态,那么当处理单元重新被 Storm 启动时,需要将自身处理的中间状态恢复。

(5)支持多种编程语言
  除了用 Java 实现 Spout 和 Bolt,还可以使用其他编程语言来完成这项工作,这一切得益于 Storm 的多语言协议。多语言协议是 Storm 内部的一种特殊协议,允许 Spout 或 Bolt 使用标准输入和标准输出来传递消息,传递的消息为单行文本或多行 JSON 编码的格式。

  Storm 支持多语言编程主要是通过 ShellBolt、 ShellSpout 和 ShellProcess 这些类来实现的,这些类都实现了 IBolt 和 ISpout 接口,以及让 Shell 通过 Java 的 ProcessBuilder 类来执行脚本或者程序的协议。

  可以看到,采用这种方式,每个 Tuple 在处理时都需要进行 JSON 的编解码,因此在吞吐量上会有较大影响。

(6)支持本地模式
  Storm 有一种“本地模式”,也就是在进程中模拟一个 Storm 集群的所有功能,以本地模式运行 Topology 与在集群上运行 Topology 类似,这对于开发和测试来说非常有用

(7)高效
  用 ZeroMQ 作为底层消息队列,保证消息能被快速处理。

Storm概念学习系列之storm的特性的更多相关文章

  1. Storm概念学习系列之storm的雪崩

    不多说,直接上干货! Storm的雪崩问题的解决办法1: Storm概念学习系列之并行度与如何提高storm的并行度 Storm的雪崩问题的解决办法2:

  2. Storm概念学习系列之storm流程图

    把stream当做一列火车, tuple当做车厢,spout当做始发站,bolt当做是中间站点!!! 见 Storm概念学习系列之Spout数据源 Storm概念学习系列之Topology拓扑 Sto ...

  3. Storm概念学习系列之storm简介

    不多说,直接上干货! storm简介 Storm 是 Twitter 开源的.分布式的.容错的实时计算系统,遵循 Eclipse Public License1.0. Storm 通过简单的 API ...

  4. Storm概念学习系列之storm的定时任务

    不多说,直接上干货! 至于为什么,有storm的定时任务.这个很简单.但是,这个在工作中非常重要! 假设有如下的业务场景 这个spoult源源不断地发送数据,boilt呢会进行处理.然后呢,处理后的结 ...

  5. Storm概念学习系列之storm的可靠性

    这个概念,对于理解storm很有必要. 1.worker进程死掉 worker是真实存在的.可以jps查看. 正是因为有了storm的可靠性,所以storm会重新启动一个新的worker进程. 2.s ...

  6. Storm概念学习系列之storm核心组件

    不多说,直接上干货! Storm核心组件 了解 Storm 的核心组件对于理解 Storm 原理非常重要,下面介绍 Storm 的整体,然后介绍 Storm 的核心. Storm 集群由一个主节点和多 ...

  7. Storm概念学习系列之storm的功能和三大应用

    不多说,直接上干货! storm的功能 Storm 有许多应用领域:实时分析.在线机器学习.持续计算.分布式 RPC(远过程调用协议,一种通过网络从远程计算机程序上请求服务). ETL(Extract ...

  8. Storm概念学习系列之Storm与Hadoop的角色和组件比较

    不多说,直接上干货! Storm与Hadoop的角色和组件比较 Storm 集群和 Hadoop 集群表面上看很类似.但是 Hadoop 上运行的是 MapReduce 作业,而在 Storm 上运行 ...

  9. Storm概念学习系列之storm的设计思想

    不多说,直接上干货! storm的设计思想 在 Storm 中也有对流(Stream)的抽象,流是一个不间断的.无界的连续 Tuple(Storm在建模事件流时,把流中的事件抽象为 Tuple 即元组 ...

随机推荐

  1. Foreman-porxy负载均衡搭建

    本文接上篇puppet负载均衡的环境实验. Foreman-proxy可以采用四层或者七层负载,都可以实现,在foreman的web界面添加一个smart-proxy,后端多个真实foreman-pr ...

  2. UDK编辑器 49条小提示

    转自:http://www.cnblogs.com/hmxp8/archive/2012/02/09/2343674.html Very Helpful~ 01. First time using t ...

  3. VisualGDB系列2:VisualGDB对Linux平台的支持特性

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 1 复杂问题的直观解决方案 只需要轻点几 ...

  4. mysql--二进制日志(bin-log)

    一.设置二进制日志 进制日志记录了所有的DDL和DML,但不包括各种查询.通过二进制日志,可以实现什么效果呢?二进制日志文件可以[实现灾难数据恢复],另外可以应用到[mysql复制数据同步].二进制日 ...

  5. LoadRunner 参数模拟——快速得到并发用户的进场规则

    LoadRunner 并发时,一般需要进入参数化 用户名或者相关的字段数据,用以满足在并发时无限的接近真实的使用场景: 但当你在设置好参数化的读取规则后,在执行并发场景时,用户并发加载顺序是否确实如你 ...

  6. [poj3259]Wormholes(spfa判负环)

    题意:有向图判负环. 解题关键:spfa算法+hash判负圈. spfa判断负环:若一个点入队次数大于节点数,则存在负环.  两点间如果有最短路,那么每个结点最多经过一次,这条路不超过$n-1$条边. ...

  7. [hdu1402]A * B Problem Plus(FFT模板题)

    解题关键:快速傅里叶变换fft练习. 关于结果多项式长度的确定,首先将短多项式扩展为长多项式,然后扩展为两倍. #include<cstdio> #include<cstring&g ...

  8. JSP错误页面

    exception是JSP九大内置对象之一,其实例代表其他页面的异常和错误.只有当页面是错误处理页面时,即isErroePage为 true时,该对象才可以使用.对于C项,errorPage的实质就是 ...

  9. 22. Generate Parentheses (recursion algorithm)

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  10. 51nod1489(dfs)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1489 题意:中文题诶- 思路:dfs 首先我们要通过攻击第1 ...