storm概述

一、什么是storm

实时流数据处理平台。大数据套件中的一个。

storm就属于上图所示的流式计算中的一个。

几个名词:

流数据

引用自百度百科:

流数据是指由数千个数据源持续生成的数据,通常也同时以数据记录的形式发送,规模较小(约几千字节)。流数据包括多种数据,例如客户使用您的移动或 Web 应用程序生成的日志文件、网购数据、游戏内玩家活动、社交网站信息、金融交易大厅或地理空间服务,以及来自数据中心内所连接设备或仪器的遥测数据。

简言之,就是数据量不大,但是源源不断产生的数据。

如上图所示,数据像自来水一样源源不断的流出,经过不断的“加工”处理,最终得到的就是“纯净水”。

这里的数据源可以是应用实时产生的数据,也可以是从数据库中读取的数据,当然一般是从消息队列拉取的数据,经过实时处理后,得到结果。

流式计算:

引用自百度百科:

在传统的数据处理流程中,总是先收集数据,然后将数据放到DB中。当人们需要的时候通过DB对数据做query,得到答案或进行相关的处理。这样看起来虽然非常合理,但是结果却非常的紧凑,尤其是在一些实时搜索应用环境中的某些具体问题,类似于MapReduce方式的离线处理并不能很好地解决问题。这就引出了一种新的数据计算结构—流计算方式。它可以很好地对大规模流动数据在不断变化的运动过程中实时地进行分析,捕捉到可能有用的信息,并把结果发送到下一计算节点。

简言之,就是就是对数据进行实时计算,来一条计算一条,相对的就是hadoop的批处理。流计算可以将结果实时反馈,从而做出动态调整。比如我们在用csdn的时候侧边会有百度推送的广告,细心一点的就会发现,这个广告是根据我们不久之前的浏览记录推送的,这个“不久之前”可能就是几分钟或者几秒钟之前。那么这样的对实时性要求较高的场景,就需要流计算来处理。

二、为什么需要storm

大数据处理已经有了hadoop了,为什么还需要hadoop呢,或者说storm相比于hadoop有什么不同呢?

首先我们知道hadoop擅长批处理,大文件的处理,比如几十、几百G甚至T级别的数据的处理,而相反的,对于小文件的处理反而效率不是那么高,并且这类处理王往对实时性要求不是那么高,只要在几个小时内甚至在一天内跑出结果就可以了。

然而对于上边说过的广告推荐,或者其他的,比如日志分析。虽然某些日志分析对实时性要求不是那么高,但是某些场景,比如检测攻击行为,显然不能在一天之后才出来检测结果,而是要迅速得到反馈响应,以应对攻击。此时我们就需要像strom的流式处理平台来解决这些问题。

三、storm的优点

作为流计算框架,显然不止storm一个,那为什么storm这么火呢,或者说它有哪些特点呢?

1.分布式系统:

可横向拓展,现在的项目不带个分布式特性都不好意思开源。

2.运维简单:

Storm的部署的确简单。虽然没有Mongodb的解压即用那么简单,但是它也就是多安装两个依赖库而已。

3.高度容错:

模块都是无状态的,随时宕机重启。

4.无数据丢失:

Storm创新性提出的ack消息追踪框架和复杂的事务性处理,能够满足很多级别的数据处理需求。不过,越高的数据处理需求,性能下降越严重。

5.多语言:

实际上,Storm的多语言更像是临时添加上去似的。因为,你的提交部分还是要使用Java实现。


参考资料:

《storm技术内幕与大数据实战》

百度百科

https://www.aliyun.com/jiaocheng/800159.html

原文地址:https://www.cnblogs.com/cnsec/p/13286649.html