想学Storm吗?Let‘s go(1)

来源:互联网 发布:软件成熟度模型 编辑:程序博客网 时间:2024/05/29 14:02

转载请注明出处:http://blog.csdn.net/jim_cainiaoxiaolang

作者:jim_cainiaoxiaolang


总体来说,接触Storm这一块已经有一年多了,但是一直没有做一些从事这方面的具体project,由于前一段工作的完结,这一段时间打算重新好好研究一下Storm。

本人对于Hadoop有一定的了解,一直在从事Hadoop对于批量数据处理方面的工作,所以觉得两者之间有一定的相似性。

对于Storm方面的文章,有很多前辈已经写了很多了,我主要是借鉴一部分他们的概念,加上一些自己学习上的体会。


1.Storm简介

Storm是一个实时计算系统。

主要特点:(1)低延迟;(2)高性能;(3)分布式;(4)可扩展;(5)容错。

Storm的优势:

1)简单的编程模型;(类似于MapReduce降低了并行批处理的复杂性,Storm降低了实时处理的复杂性)

2)服务化,一个服务框架,支持热部署,即时上线或下线APP;

3)可以使用各种语言编程;

4)Storm会管理工作进程和节点故障;

5)水平扩展,计算是在多个线程,进程和服务器之间并行进行的。

6)可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。

7)快速。系统的设计保证了消息能够得到快速的处理,使用zeroMQ作为其底层消息队列;

8)本地模式。Storm有一个“本地模式”,可以在处理的过程中完全模拟Storm集群。这样可以快速地进行开发和单元测试。


2.Storm架构

Storm集群是由一个主节点和多个工作节点组成。

主节点运行一个名为“Nimbus”的守护进程,用于分配代码,布置任务及故障检测。

每个工作节点都运行了一个名为“Supervisor”的守护进程,用于监听工作,开始并终止工作进程。

Nimbus和Supervisor都能快速失败,而且是无状态的,这样一来它们就变得十分健壮,两者的协调工作是由Zookeeper来完成的。

Zookeeper用于管理集群的不同组件,ZeroMQ是内部消息系统,JZMQ是ZeroMQMQ的java Blinding。有个名为Storm-deploy的子项目可以在AWS上一键部署Storm集群。


3.Storm和Hadoop基本概念对比

4.Storm的基本概念

Nimbus:负责资源分配和任务调度;

Supervisor:负责接收NImbus分配的任务,启动和停止属于自己管理的Worker进程;

Worker:运行具体处理逻辑的进程;

Task:worker中的每一个spout/bolt的线程称为一个task。在Storm0.8之后,task不再与物理线程对应,同一个Spout/bolt的task可能会共享一个物理线程,该线程称为executor。

Topology:storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。

Spout:在一个topology中产生源数据流的组件。通常情况下Spout会从外部数据源中读取数据,然后转换为topology内部的源数据。Spout是一个主动的角色,其接口中有一个nextTuple()函数,Storm框架会不停地调用此函数,用户只要在其中生成源数据即可。

Bolt:在一个topology中接收数据然后执行处理的组件。Bolt可以执行过滤,函数操作,合并,写数据库等任何操作。Bolt是一个被动的角色,其接口有一个execute(Tuple input)函数,在接收到消息后会调用此函数,用户可以在其中执行自己想要的操作。

Tuple:一次消息传递的基本单元。本来应该是一个key-value的map,但是由于各个组件间传递的tuple的字段名称已经事先定义好,所以tuple只要按序填入各个value就行了,所以就是一个value list。

Stream:源源不断传递的tuple就组成了stream。


5.Storm的使用场景

1).流聚合

流聚合把两个或者多个数据流聚合成一个-基于一些共同的tuple字段。

2).批处理

有时候为了性能或者一些别的原因,你可能想把一组tuple一起处理,而不是一个个单独处理。

3).BasicBolt

(1)读一个输入tuple(2)根据这个输入tuple发射一个或多个tuple(3)在execute的方法的最后ack那个输入tuple

4).内存内缓存+Fields grouping组合

5).计算top-N

6).用TimeCacheMap来高效的保存一个最近被更新的对象的缓存

7).分布式RPC:CoordinatedBolt和KeyedFairBolt用Storm做分布式RPC应用的时候有两种比较常见的模式:它们被包装在CoordinatedBolt和KeyedFairBolt中。


6.Storm分组机制

数据流分组定义了一个数据流中的tuple如何分发给topology中不同bolt的task。

Shuffle grouping(随机分组)

Field grouping(按字段分组)

All grouping(全复制分组)

Globle grouping(全局分组)

None grouping(不分组)

Direct grouping(指向型分组)


目前也是刚刚开始从头学起Storm,先对其主要的基本概念做一个了解。


0 0
原创粉丝点击