您的位置:首页 > 运维架构

Storm基础:基本概念

2017-03-06 23:35 267 查看


Apache Storm是一个免费开源的分布式实时计算系统。Storm能够轻松可靠地处理无界的数据流,就像Hadoop对数据进行批处理。Storm主要使用Clojure与Java语言编写,最初是由Nathan Marz带领BackType公司的团队创建,在Backtype公司被Twitter公司收购后开源。2013年9月,Apache基金会开始接管并孵化Storm项目。

Storm能用到很多场景中,包括:实时分析、在线机器学习、连续计算、分布式RPC、ETL等。

Storm中的基本概念如下:

Topology

一个Topology就是一个计算节点所组成的图。Topology里面的每个处理节点都包含处理逻辑, 而节点之间的连接则表示数据流动的方向。

Stream

Stream是Storm里面的关键抽象。一个Stream是一个无界的Tuple序列。Tuple可以包含整形、长整型、短整型、字节、字符、双精度数、浮点数、布尔值和字节数组。用户可以定义字节的序列化器以在Tuple中使用自定义类型。
Tips:

Storm使用Tuple来作为它的数据模型。每个Tuple是一堆值,每个值有一个名字,并且每个值可以是任何类型。一个没有边界的、源源不断的、连续的Tuple序列就组成了Stream。

Spout

Spout是Topology流的来源。通常Spout会从外部数据源(队列、数据库等)读取数据,然后封装成Tuple形式,之后发送到Stream中。Spout负责从数据源拉取数据,相当于整个系统的生产者。

Bolt

Bolt负责消费数据并将tuple发送给下一个计算单元。Bolt处理输入的Stream,并产生新的输出Stream。Bolt可以执行过滤、函数操作、Join、操作数据库等任何操作。
Tips:

Spout 发射数据; Bolt 处理数据。可以实现Spout和Bolt对应的接口以处理你的应用的逻辑。Spout和Bolt所组成的网络会被打包成Topology, 可以把Topology提交给Storm的集群来运行。

Stream Grouping

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。可通过TopologyBuilder类的setSpout()和setBolt方法来设置每个Spout或者Bolt的并行度。

Worker

Topology跨一个或多个Worker节点的进程执行。每个Worker节点的进程是一个物理的JVM和Topology执行所有任务的一个子集。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Storm Topology Spout Bolt Tuple