Storm简介

Storm是一个免费的分布式实时计算系统。Storm能够轻松可靠地处理无界的数据流,就想Hadoop对数据进行批处理;但是Storm能持续运作下去,并且Storm的使用十分简单,开发人员可以使用任何编程语言对它进行操作,得到满意的结果。

1.1 什么是Storm

Storm是一个分布式计算框架,主要使用Clojure和Java语言编写。

Storm能用到很多场景中,包括实时分析、在线机器学习、连续计算、分布式RPC、ETL等。Strom的处理速度非常快,每个节点每秒可以处理100万条消息。同时,Storm是可伸缩的、容错的,并且能保证数据根据用户的设定被妥善处理,便于进行设置和操作。

Storm集成了许多消息队列和数据库技术。Storm的Topology消耗数据流,以任意复杂的方式处理这些流,并且在每个需要计算的阶段以这些流进行重新划分。Storm的开发语言主要是Java和Clojure,其中Java定义骨架,Clojure编写核心逻辑。Storm具有多语言功能,Java是Storm的主要使用语言,但Python也是Storm的常用语言之一。

Storm公开一组原语进行实时计算。使用这些简单的原语,能实现类似MapReduce的效果。Storm的原语极大地简化了并行实时计算的编写,最终使并行批处理的编写变得易于实现。

Storm具有的关键特征如下:

  • 用例非常广泛:Storm可以用于处理消息和更新数据库(即流处理),完成数据流的持续查询任务,然后把结果流送到客户端(持续计算)。Storm并行密集查询能持续进行,完成搜索查询(分布式RPC)和更多的业务功能。仅一个小小的Storm的原语集便可以处理惊人数量的用例。
  • 可伸缩性:Storm每秒处理大量的消息。要对一个拓扑进行扩展,用户所需要做的仅仅是向拓扑中添加主机,然后增加拓扑的并行设置。Storm使用ZooKeeper协调集群,使其可以扩展到更大的集群规模。
  • 保证没有数据丢失:一个实时系统必须前有力地保证数据能按照用户设定而被成功处理,一个丢失数据的系统是不优秀的。Storm能保证每条消息都会被妥善处理,这与其他系统(例如S4)形成了非常直接的对比。
  • 强壮的鲁棒性:不同于鲁棒性差的甚至难以管理的Hadoop系统,Storm集群非常健壮,能有效地运行。强壮的鲁棒性是Storm项目的一个明确目标,旨在让用户尽可能简单地管理Storm集群。
  • 容错性好:如果在执行用户设定的计算时有错误发生,Storm只需要重新分配任务再执行即可。Storm能保证计算永远运行,知道用户结束计算进程为止。
  • 编程语言无关性:健壮的、可伸缩的实时处理不应该局限于单一的平台,Storm的拓扑和处理组件可以使用任何语言定义。这一编程语言无关性是的Storm几乎可以被任何一个用户轻松使用。

1.2 Storm的核心技术和基本组成

Storm框架的核心由7个部分组成,它们同时也是Storm的基本组成部分。

  • Topology(拓扑) 一个拓扑是一个图的计算。用户在一个拓扑的每个节点包含处理逻辑,节点之间的链接显示数据应该如何在节点之间传递。Topology的运行是很简单的。
  • Stream(流) 流是Storm的核心抽象。一个流是一个无界Tuple序列,Tuple可以包含整型、长整型、短整型、字节、字符、双精度数、浮点数、布尔值和字节数组。用户可以通过定义序列化器,在本机Tuple使用自定义类型。
  • Spout(龙卷) Spout是Topology流的来源。一般Spout从外部来源读取Tuple,提交到Topology。Spout可分为可靠的和不可靠的两种模式。Spout可以发出超过一个流。
  • Bolt(闪电) Topology中的所有处理都在Bolt中完成。Bolt可以完成过滤、业务处理、连接运算、连接、访问数据库等业务。Bolt可以做简单的流的转换,发出超过一个流,主要方法是execute方法。完全可以在Bolt中启动新的线程做异步处理。
  • Stream grouping(流分组) 流分组用于在Bolt的任务中定义流应该如何分区。Storm有8个内置的流分组接口:随机分组(shuffle grouping)、字段分组(Fields grouping)、部分关键字分组(Partial key grouping)、全部分组(All grouping)、全局分组(Global grouping)、无分组(None grouping)、直接分组(Direct grouping)、本地或者随机分组(Local or shuffle grouping)。
  • Task(任务) 每个Spout或者Bolt在集群执行许多任务。每个任务对应一个线程的执行,流分组定义如何从一个任务集到另一个任务集发送Tuple。可通过TopologyBuild类的setSpout()和setBolt()方法来设置每个Spout或者Bolt的并行度。
  • Worker(工作进程) Topology跨一个或多个Worker节点的进程执行。每个Worker节点的进程是一个物理的JVM和Topology执行所有任务的一个子集。

你可能感兴趣的:(Storm简介)