不多说,直接上干货!

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. 给.sh文件添加可执行权限

    有时我们运行.sh文件时会发现没有权限,具体解决方案如下 第一种:bash+执行文件 第二种:chmod命令 如果给所有人添加可执行权限:chmod a+x 文件名:如果给文件所有者添加可执行权限:c ...

  2. Go语言命令行操作命令详细介绍

    转自:http://www.jb51.net/article/56781.htm Go 命令 Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行go来查看它们: 图 Go命令显示详细的信息 ...

  3. linux日常管理-curl工具

    curl 在linux命令行中用于访问网站,下载东西, 可以用 curl www.qq.com 访问 出现很多源代码 ///////////////////////////////////////// ...

  4. 为组件设定UI

    -----------------siwuxie095                             工程名:CustomizeSwing 包名:com.siwuxie095.swing 类 ...

  5. Express的日志模块morgan

    morgan 是nodejs的一个日志模块,由 express 团队维护. 这里通过示例简要介绍morgan模块在express中的应用,大部分示例直接来自于.morgan的文档:https://gi ...

  6. 阶段3-团队合作\项目-网络安全传输系统\sprint0-产品规划与设计\第2课-产品功能模型设计

  7. C# 生成chm帮助文件

    引用博友的博客地址,里面有详细资料,谢谢博主分享 http://blog.csdn.net/snakorse/article/details/44963015

  8. POJ 2398 Toy Storage (叉积判断点和线段的关系)

    题目链接 Toy Storage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4104   Accepted: 2433 ...

  9. DATASET()用法

    DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合.所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是 ...

  10. CentOS常用软件安装方法

    软件包介绍 源码包(脚本安装包) 二进制包(RPM包,系统默认包) 源码包 优点 开源,如果有足够的能力,可以修改源代码 编译安装,更加适合自己的系统,稳定高效 缺点 安装步骤较多,容易出错 编译过程 ...