Storm基本原理

原文地址:http://storm.apache.org/documentation/Rationale.html



过去的十年见证了数据处理领域的一次革命。MapReduce,Hadoop以及其它相关的技术使得我们可以存储与处理的数据达到了过去想都不敢想的量级。不幸的是,这些数据处理技术并不能用于实时系统。本身这些技术也不是为了用于实时系统而生的。我们也没有任何方式可以将Hadoop改造以用于实时系统;实时数据处理与批处理截然不同。

然而大规模实时数据处理的需求与日俱增,缺少一个“实时的Hadoop”已经成为数据处理领域最大的缺憾。

Storm填补了这个缺憾。

在Storm出现以前,通常你需要手工建立一个队列节点与工作节点的网络来进行实时数据处理。工作节点处理队列中的消息,更新数据库,发送消息到另一个队列以进行进一步的处理。这样的方式有许多问题:

  1. 编码枯燥。你需要花费很多时间去做配置,消息要发送到哪,怎么部署队列节点,怎么部署工作节点。而你真正关心的实时处理逻辑只占你代码的一小部分。
  2. 系统脆弱。容错性太差,你需要自己去注意每一个队列节点和工作节点的状态。
  3. 不易扩展。当单个节点的消息吞吐量过高时,你需要对消息进行切分。对于其他工作节点则需要进行重新配置,这样才能将消息发送给新的节点。其中引入的节点变更都有可能失败。

尽管在处理大量消息时,队列节点与工作节点这样的处理方式运转得不是太好,但消息处理无疑是实时计算的基本范式。问题是应该怎么样才能让消息处理可以做到不丢数据,可以处理超大规模的数据,并且可以很简单的来使用和运维?

Storm可以解决这些问题。

Storm的重要性

Storm暴露了一系列的原语用于实时计算。就像MapReduce极大的简化了并行批处理程序的编写,Storm的原语也极大的简化了并行实时计算程序的编写。

Storm的关键特性:

  1. 使用场景非常广泛。Storm可以用于处理消息,更新数据库(流式处理),对数据流进行连续查询并将结果流式的返回给客户端(连续计算),分布式RPC等等。少量的原语满足了大量的使用需求。
  2. 扩展性。Storm可以扩展到每秒钟可处理大量的消息。要扩展一个拓扑,你只需要添加机器并修改拓扑的设置就可以。作为例子,Storm的一个初始应用,在拥有10个节点的集群上面,每秒钟可以处理1,000,000条消息,其中还包括了每秒钟几百次的数据库访问。通过使用ZooKeeper,Storm的集群可以扩展到一个更大的规模。
  3. 可靠性。一个实时系统必须能够保证所有的数据都被成功处理,如果无法保证将会限制它的使用场景。Storm可以保证每一条消息都被处理。这是Storm与其他系统,比如S4,最大的不同。
  4. 鲁棒性。Hadoop是出了名的难管理,而Storm不一样。让用户尽可能不费力气的来管理Storm集群是Storm项目的一个目标。
  5. 容错性。当计算过程中发生了故障,如果有必要的话Storm会重新分配任务。Storm会确保计算任务一直进行下去,除非你去终止它。
  6. 编程语言无关性。拥有鲁棒性与扩展性的实时处理系统不应该局限在单一的平台上。可以使用任何的语言来定义Storm的拓扑逻辑和组件,这使得几乎所有人都可以使用Storm。
时间: 2024-09-19 03:53:13

Storm基本原理的相关文章

Robocode基本原理之坐标锁定

导论 前面我们了解了Robocode中的绝对方向,相对方向及整个方向系统.相信大 家对此深有体会了.但是问题又来了,单知道方向似乎不能完全达到了解敌人的 目的.怎样去探测敌人的距离?怎样精确的锁定目标呢?对于移动中的目标我们 又如何处理?在这里我们将利用Java.lang 基本类库中的Math类及一些基本三角 函数方法为你揭开这些迷雾.对于那些快被遗忘的三角几何知识在本文的最后 Skyala.Li有比较详细的讲解. 坐标基本概念 首先我们还是来看看Robocode API中的一段文字翻译. Al

《Storm入门》中文版

本文翻译自<Getting Started With Storm>译者:吴京润    编辑:郭蕾 方腾飞 本书的译文仅限于学习和研究之用,没有原作者和译者的授权不能用于商业用途. 译者序 Storm入门终于翻译完了.首先感谢并发编程网同意本人在网站上首发本书译文,同时还要感谢并发编程网的各位大牛们的耐心帮助.这是本人翻译的第一本书,其中必有各种不足请诸位读者朋友不吝斧正. 译完此书之后,我已经忘记了是如何知道的Storm这个工具了.本人读过的所有技术书籍大部分都是在地铁上完成的,现在已经成了习

Storm专题二:Storm Trident API 使用详解

一.概述      Storm Trident中的核心数据模型就是"Stream",也就是说,Storm Trident处理的是Stream,但是实际上Stream是被成批处理的,Stream被切分成一个个的Batch分布到集群中,所有应用在Stream上的函数最终会应用到每个节点的Batch中,实现并行计算,具体如下图所示:       在Trident中有五种操作类型: Apply Locally:本地操作,所有操作应用在本地节点数据上,不会产生网络传输      Repartit

Storm之Bolt-接口

IBolt:           bolt接口类,定义了常用的几个接口,IBolt的实现类在client上被创建,然后序列化到拓扑里并被提交到集群的master上,之后nimbus会启动worker进行反序列化,调用prepare进行准备完毕之后就开始处理tuples         如果是在java里定义bolts ,建议实现IRichBolt.java接口类,IRichBolt.java同时继承了IComponent.java接口,提供了更多对拓扑进行操作的方法. /** * 当集群中的wo

使用Python编写Storm程序,无法将结果写入MySQL

问题描述 使用Python编写Storm程序,无法将结果写入MySQL 我使用Python作为编程语言写一个关联关系挖掘的程序部署在Storm集群,将jar包提交到集群后无法将结果写入数据库,贴上写入结果的bolt代码,希望大家帮忙看看,不胜感激: #coding=utf-8 import MySQLdb import logging from pyleus.storm import SimpleBolt log = logging.getLogger('log_results') def wr

Storm集群安装部署步骤

开始学习Storm,本文主要记录Storm集群安装部署步骤,不包括对Storm的介绍. 安装storm集群,需要依赖以下组件: Zookeeper Python Zeromq Storm JDK JZMQ 故安装过程根据上面的组件分为以下几步: 安装JDK 安装Zookeeper集群 安装Python及依赖 安装Storm 另外,操作系统环境为:Centos6.4,安装用户为:root. 1. 安装JDK 安装jdk有很多方法,可以参考文博客使用yum安装CDH Hadoop集群中的jdk安装步

Twitter Storm

第 121 章 Twitter Storm 目录 121.1. 单机版121.2. lein 安装 121.1. 单机版 操作系统环境:Ubuntu 13.04 KVM虚拟机 安装 storm 涉及到安装以下包:Python.zookeeper.zeromq.jzmq.storm 过程 121.1. Ubuntu + Storm 单机环境安装 安装 zookeeper $ sudo apt-get install zookeeper zookeeper-bin zookeeperd 安装 zer

Ajax基本原理讲解

ajax 这段时间在学习ajax,前今天给公司同事讲解了一下基本原理,也随便放在网上给大家参考一下.我认为ajax简单的讲就是客户端通过javascript脚本获取服务器端的文本,通过解析返回值,更新部分的网页内容.下面结合一个获取QQ天气预报网页,并且对返回值进行处理的例子进行一下讲解.行数:解释.14:点击按钮开始获取.29:显示右上角的"正在加载..."的小区域(仿造gmail).30:创建XMLHTTP,IE的方式,其它的浏览器创建方式不同.31:XMLHTTP状态发生变化时调

微软.NET平台中类型使用的基本原理

微软 微软.NET平台中类型使用的基本原理 ----微软 .NET平台系列文章之二 译文/赵湘宁 在上一次的讨论中,我介绍了许多微软.NET平台公共语言运行时CLR (common language runtime) 中与类型有关的基本概念.其中重点讨论了如何从System.Object类型中派生出所有别的类型,以及程序员能够使用的多种强制类型转换机制(如C#操作符).最后,我提到了编译器如何使用名字空间以及公共语言运行时CLR是如何忽略名字空间的. 在本文中,我们将继续上次类型基础的讨论.首先