Storm核心概念
- Topologies 拓扑, 将整个流程串起来
- Streams 流, 数据流, 水流
- Spouts 产生数据/水流的东西
- Bolts 处理数据/水的东西 (水壶/水桶接)
Tuple 数据/水 - Stream groupings
- Reliability
- Tasks
- Workers
Storm核心概念总结
- Topology: 计算拓扑,由spout和bolt组成的
- Stream: 消息流,抽象概念,没有边界的tuple构成
- Tuple: 消息/数据,传递的基本单元
- Spout: 消息流的源头,Topology的消息生产者
- Bolt: 消息处理单元,可以做过滤,聚合,查询/写数据库的操作
Topologies
逻辑上一个实时的应用会被打包成一个Storm topology。一个Storm拓扑类似于一个MapReduce作业。有一个关键点不同的是MapReduce作业完成最终会结束,但是Storm中一个topology会一直执行,直到被你kill。一个topology是一个图(graph)由多个spout 和 bolt 构成,它们会被连接成一个stream组。
Resources:
- TopologyBuilder: use this class to construct topologies in Java
- Running topologies on a production cluster
- Local mode: Read this to learn how to develop and test topologies in local mode.
Streams
在Storm中,stream 是一个核心抽象。一个steam是一个无界的多个tuples的序列,这个stream被处理和创建在并行分布式的环境中。Steams被定义成一个schema,这个schema的名字是stream的tuples中的。默认情况下,它包含了 integers, longs, shorts, bytes, strings, doubles, floats, booleans, and byte arrays 等类型。你也可以按照要求定义自己的类型。
每一个Stream会给一个id
Resources:
- Tuple: streams are composed of tuples
- OutputFieldsDeclarer: used to declare streams and their schemas
- Serialization: Information about Storm's dynamic typing of tuples and declaring custom serializations
Spouts
一个Spout是一个stream的源头在一个topology中,一般来说spouts会读tuples数据从外部的数据源,再把它们发送到topology中(e.g. a Kestrel queue or the Twitter API)。Spouts可以是可靠的和不可靠的。当被Storm处理失败时,一个可靠的spout可以重新发送一份tuple。然而不可靠的spout可能会丢掉一些数据。
Spouts可以发送超过一个的stream。为此,需要调用declareStream
方法
Spouts中主要的方法是nextTuple
其他的两个主要的方法是ack
和fail
,这两个方法只在可靠的spouts中可以调用。
Resources:
- IRichSpout: this is the interface that spouts must implement.
- Guaranteeing message processing
Bolts
在topologies中所有的处理都在bolts中完成,它可以做很多事例如filtering, functions, aggregations, joins, talking to databases, and more。
它既可以做一些简单的流的转换,也可以做复杂的流的转换它通常要求多个步骤和多个bolts。
它可以发射多个流,所以需要声明多个流通过declareStream
方法
在bolt中主要的方法是execute.
Resources:
- IRichBolt: this is general interface for bolts.
- IBasicBolt: this is a convenience interface for defining bolts that do filtering or simple functions.
- OutputCollector: bolts emit tuples to their output streams using an instance of this class
- Guaranteeing message processing
网友评论