一 Storm是什么
Storm是一个开源的分布式、可伸缩、容错的、实时计算系统,可以对流式数据进行可靠的处理。
Storm有很多应用场景,包括实时数据分析、在线机器学习、连续计算、分布式RPC、ETL等。
二 Storm和Hadoop的区别
Storm是一个实时的计算系统,计算的数据是无界的数据流,称为“流式数据”。除非Topology被杀死,否则会一直执行。
Hadoop是一个非实时的数据批处理系统,MapReduce的计算对象是一个有界的数据集。MapReduce最终会完成。
三 Storm核心技术和基本组成
1 Topology
Topology是一个有向图,表示一个数据的逻辑运算过程。有向图中的节点表示数据的处理逻辑,节点之间的链接表示数据的流动路径。
2 Stream
Storm中,数据的计算单位称为一个tuple(元组),元组中可以存储基本数据类型、String字符串、字节数组。这些Tuple在Topology中流动,形成了Stream。因此Stream就是抽象的数据对象。
3 Spout(喷口)
Spout是Topology的数据来源。Spout从Storm外部读取数据,并将数据发送到Topology中。
Spout可以分为可靠和不可靠两种模式。可靠的模式下可以保证每条ack的数据被Topology完全处理,如果计算失败将会重发;不可靠的Spout不保证每条数据被完全处理。
4 Bolt(螺栓)
Topology中的所有逻辑处理都在Bolt中完成,Bolt接收来自Spout或者其他Bolt的流,对流中的数据进行过滤、业务处理、数据存储等操作。
5 Stream grouping(流分组)
定义Bolt之间或者Bolt与Spout之间,数据流的分组方式。包括7中内置的分组方式:随机分组(Shuffle grouping)、字段分组(Fields grouping)、全部分组(All grouping)、全局分组(Global grouping)、无分组(None grouping)、直接分组(Direct grouping)、本地或者随机分组(Local or shuffle grouping)。
6 Task
每个Spout或者Bolt在集群中执行很多任务,每个任务对应一个线程来执行。在Topology中,每一个节点可以被认为是一个任务。
7 Worker(工作进程)
每个Worker是一个物理的JVM和Topology所有任务的一个子集。服务器集群中,一个节点可以部署一个或者多个worker。
四 Storm优势
1 集成多种技术
Storm集成了很多消息队列系统和数据库系统,用户可以方便的搭建分布式的数据处理框架。
集成的消息队列主要有Kestrel、RabbitMQ、Kafka、JMS
2 简单的API
Storm使用Spout、Bolt、Topology三个抽象类型,完成了一个复杂多级的流式处理过程的定义和实现。
3 可扩展
Storm可以简单的对Topology的各个部分进行并行度的调整,从而完成扩展。
Storm一个节点(Intet E5645@2.4GHz 的CPU和24GB内存),可以在1秒钟处理100万条100字节的消息。
4 容错性
当节点死亡或者worker死亡,Storm会尝试重启worker或者将task分配到其他节点。
5 可靠性(保证数据处理)
通过跟踪Tuple的处理过程,可以保证每条数据可以被完全处理。
6 可以使用任何语言
主要使用Java开发,非JVM的Spout或者Bolt通过一个基于Json协议的stdin/stdout与Storm通信。
五 应用现状
1 流式数据处理(Streaming Processing)
2 连续计算(Continuous Computation)
3 分布式RPC(Distributed RPC)
Spout从DRCP服务器中获取函数调用的参数;Spout将函数名和参数发送到Topology进行函数调用和计算;Bolt将计算结果返回给DRCP服务器。