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