一、Storm概述
Storm是一个分布式的、可靠的、零失误的流式数据处理系统。
它的工作就是委派各种组件分别独立的处理一些简单任务。在Storm集群中处理输入流的是Spout组件,而Spout又把读取的数据传递给叫Bolt的组件。
Bolt组件会对收到的数据元组进行处理,也有可能传递给下一个Bolt。我们能够把Storm集群想象成一个由bolt组件组成的链条集合。数据在这些链条上传输。而bolt作为链条上的节点来对数据进行处理。
Storm和Hadoop集群表面看上去非常类似,可是Hadoop上面执行的是MapReduceJobs,而在Storm上执行的是拓扑topology,这两者之间是非常不一样的,关键差别是:MapReduce终于会结束,而一个topology永远会执行(除非你手动kill掉),换句话说。Storm是面向实时数据分析,而Hadoop面向的是离线数据分析。
如果有这么一种情形。当你看政论类节目的时候。他们会常常提到一些人名和一些热门话题。如果我们把当中人名和话题的反复次数都记录下来,结果应该是一件非常有趣的事情。
因此,想象在Storm环境下,我们能够把辩论者说的话作为输入流,spout组件来读取这些数据,然后把每一句话发送给bolt1组件,bolt1组件负责把这一句话拆分成一个个单词。再把这些单词发送到bolt2组件。bolt2组件负责统计每一个单词的数量然后把这些信息存储到数据库中。辩论者在不断的说话。而storm不断的实时刷新数据库中结果,当你想查看这些结果时,你仅仅需查询数据库就可以。
如今,你能够想象假设能够把这些spout和bolt均衡分布到整个集群中,而且能够方便地做无限制的扩展,厉害吧?这就是Storm的威力!
图1.1:一个简单的Topology
Storm的一些典型应用场景
1.数据流处理:与其他流处理系统不同,storm不须要中间队列媒介
2.实时计算:可连续不断的进行实时数据处理,把处理的结果实时更新展示到client
3.分布式远程过程调用:可充分利用集群中CPU资源,进行CPU密集型计算。
二、Storm组件
集群中有两种类型的节点:主节点和工作节点
-
- master节点:执行Nimbus进程,负责分发代码。安排任务。监控执行状态(主要是节点成功失败状态)。
- worker节点:执行Supervisor进程,负责执行一个Topology的一个子集
图1.2:storm 集群中的组件:
Storm集群中的状态都保存在zookeeper或本地磁盘中,因此Storm中的进程都是无状态的。不论什么一个节点失败或重新启动都不会影响整个集群。Storm底层使用zeromq来保证其非凡的特性:
- 并发的socket 类
- 比TCP更快,适用于集群环境和超级计算
- 通过inproc、IPC、TCP和多路广播传输消息
- 异步IO
- Connect N-to-N via fanout,pubsub,pipeline,requst-reply
- 使用push/pull模式
三、Storm特性
- 编程简单:主要依赖于spout和bolt来实现
- 支持多种编程语言:基于JVM的语言都能够支持,不论什么一个其他语言仅仅要实现了一个中间类也可支持
- 容错性高:执行宕机、重新启动等
- 可拓展:能够随意增删节点到集群
- 可靠性高:全部消息都被保证至少消费一次。也就是说,Storm中消息不会丢失
- 高速:快就不必多少了
- 事务支持
初步了解Storm之后,下一节会通过写一个简单的Demo执行一下来让大家真实体会一下Storm。