13.5 Storm
Apache Storm是一个实时流计算框架,由Twitter在2014年正式开源,遵循Eclipse Public License 1.0。Storm基于Clojure等语言实现。

Storm集群与Hadoop集群在工作方式上十分相似,唯一区别在于Hadoop上运行的是MapReduce任务,在Storm上运行的则是topology。MapReduce任务完成处理即会结束,而topology则永远在等待消息并处理(直到被停止)。
使用Compose搭建Storm集群
利用Docker Compose模板,用户可以在本地单机Docker环境快速地搭建一个Apache Storm集群,进行应用开发测试。
1.Storm示例架构
Storm架构如图13-4所示。

图13-4 Storm示例架构
其中包含如下容器:
·Zookeeper:Apache Zookeeper三节点部署。
·Nimbus:Storm Nimbus。
·Ui:Storm UI
·Supervisor:Storm Supervisor(一个或多个)。
·Topology:Topology部署工具,其中示例应用基于官方示例storm-starter代码构建。
2.本地开发测试
首先从Github下载需要的代码:
- $ git clone https://github.com/denverdino/docker-storm.git
- $ cd docker-swarm/local
代码库中的docker-compose.yml文件描述了典型的Storm应用架构。
用户可以直接运行下列命令构建测试镜像:
- $ docker-compose build
现在可以用下面的命令来一键部署一个Storm应用:
- $ docker-compose up -d
当UI容器启动后,用户可以访问容器的8080端口来打开操作界面,如图13-5所示。

图13-5 Storm UI
利用如下命令,可以伸缩supervisor的数量,比如伸缩到3个实例:
- $ docker-compose scale supervisor=3
用户也许会发现Web界面中并没有运行中的topology。这是因为Docker Compose目前只能保证容器的启动顺序,但是无法确保所依赖容器中的应用已经完全启动并可以被正常访问了。
为了解决这个问题,需要运行下面的命令来再次启动topolgoy服务应用来提交更新的拓扑:
- $ docker-compose start topology
稍后刷新Storm UI,可以发现Storm应用已经部署成功了。
