本节书摘来自华章计算机《Storm分布式实时计算模式》一书中的第1章,第1.1节,作者:(美)P. Taylor Goetz Brian O’Neill 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
第1章 分布式单词计数
本章将介绍使用Storm建立一个分布式流式计算应用时涉及的核心概念。我们通过建立一个简单的计数器程序实现这个目的。计数器将持续输入的一句句话作为输入流,统计其中单词出现的次数。单词计数这个例子浅显易懂,引入了多种数据结构、技术和设计模式。这些都是实现更复杂计算所必须的基础。
本章首先概要介绍Storm的数据结构,然后实现一个完整Storm程序所需的各个组成部分。读完本章,读者将会了解Storm计算的基本结构、搭建开发环境的方法、Storm程序的开发和调试技术。
本章包括以下主题:
- Strom topology的基本组成部分——stream、spout和bolt。
- 搭建Storm开发环境。
- 实现单词计数程序。
- 并发和容错机制。
- 并发计算任务以实现扩容。
1.1 Storm topology的组成部分——stream、spout和bolt
Storm分布式计算结构称为topology(拓扑),由stream(数据流),spout(数据流的生成者),bolt(运算)组成,如图1-1所示。Storm topology大致等同与Hadoop这类批处理运算中的job。然而,批处理运算中的job对运算的起始和终止有着明确定义,Storm topology会一直运行下去,除非进程被杀死或被取消部署。
https://yqfile.alicdn.com/22038b0f9457d69f3739b84f8e706b23007317b1.png" >
1.1.1 stream
Storm的核心数据结构是tuple。tuple是包含了一个或者多个键值对的列表,Stream是由无限制的tuple组成的序列。如果你对复杂事务处理(Complex Event Processing,CEP)比较熟悉,tuple就相当于CEP中的event。
1.1.2 spout
spout代表了一个Storm topology的主要数据入口,充当采集器的角色,连接到数据源,将数据转化为一个个tuple,并将tuple作为数据流进行发射。
你会发现Storm为实现spout提供了非常简单的API。开发一个spout的主要工作就是编写代码从数据源或者API消费数据。数据源可能包括以下几种:
- Web或者移动程序的点击流
- Twitter或其他社交网络的消息
- 传感器的输出
- 应用程序的日志事件
因为spout通常不会用来实现业务逻辑,所以在多个topology中常常可以复用。
1.1.3 bolt
bolt可以理解为计算程序中的运算或者函数,将一个或者多个数据流作为输入,对数据实施运算后,选择性地输出一个或者多个数据流。bolt可以订阅多个由spout或者其他bolt发射的数据流,这样就可以建立复杂的数据流转换网络。
像Spout API一样,bolt可以执行各式各样的处理功能,bolt的编程接口简单明了,bolt可以执行的典型功能包括:
- 过滤tuple
- 连接(join)和聚合操作(aggregation)
- 计算
- 数据库读写