刚刚甩了自己几个大嘴巴子,让自己好好静一静。不多说了,重新整理下Storm的简介。按下自己看啥都难受的心。
一、Apache Storm
为何要学Storm
- Storm虽然不是流处理里面最好的(Flink已经青出于蓝而胜于蓝了,还有阿里更胜一筹的Blink),但是绝对是入门的关键。
- 明晰自己的目的:低延时、无穷数据、持续计算,这是我们应用流处理的原由。列举一个最最简单的例子:屏蔽词。
支持平台
原先只支持Unix兼容的操作系统上,0.9.1版本后同时兼容Windows
技术栈介绍
Java和Clojure + Python
而因为JNI的原因,其实Storm的组件(spout和bolt)都可以使用其他任意语言进行开发。
环境
Storm开发环境装配详见《原生腾讯云centos7.5 Apache Storm搭建指南
》(备注:为了降低配置环境时,因为权限、目录等影响,游鱼默认用的是root用户,并且关闭了防火墙。但是有关问题还是会提到的,只要注意一下就好了。另外./指的是zookeeper的根目录)
二、理念
- Input data source:数据源
- Spout:流的源,通过编写Spout以从数据源读取数据
- Bolt:逻辑处理单元,Spout将数据传到Bolt和Bolt的过程,并产生新的数据流,Bolt可以进行过滤、聚合,并与数据源和数据库进行交互。
- Tuple:有序元素列表
- Stream:元组的无序序列
关键词:拓扑和路由
三、集群架构
- Apache Storm的集群架构采用了主从设备模式。
- Zookeeper framework:协助Supervisor和nimbus交互
- Nimbus:Storm集群的主节点,又称Master。而工作节点分发数据并监控故障
- Supervisor:工作节点又称Workers,负责管理工作进程以完成分配的任务
- Woker process:工作进程,其执行与特定拓扑相关的任务,其创建执行器,并要求他们完成任务
- Execute:执行器,由工作进程产生的单个进程,用于特定的spout与bolt
- Task:任务,实际执行数据处理。他是个spout或bolt
四、工作流程
五、初步示例
由此鱼这边启动半年前入门的小Topology回味下简介,内容其实就是常见的词频统计。
#开启Zookeeper
> ./bin/zkServer.sh start
#在主设备上开启nimbus、ui
> ./bin/storm nimbus &
> ./bin/storm ui &
#在其他设备上开启supervisor
> ./bin/storm supervisor &
#主设备状态
> jps
16290 Jps
1844 nimbus
2020 core
789 QuorumPeerMain
#其他设备状态
> jps
12931 Jps
3349 Supervisor
2079 QuorumPeerMain
#提交Topology
#不知道为什么,这次鱼在主节点上无法启动Supervisor,以后再细看,推测是因为这次只启用了两个节点,配置上起了冲突
此时工作就开始了!最好的办法是进入Storm UI一探究竟。
由上至下分别是:
- Apache Storm总概览
- 任务分配节点状态
- 任务状态
- 任务执行节点状态
然后再进入任务内部,一探究竟
由上至下分别是:
- 任务总概
- 向任务发出指令
- 任务一段时间内的状态
- 流的源
- 逻辑处理单元
环境搭建
安全生产
对于内部环境来说,做物理隔绝就好,只要将zookeeeper的数据源对外开放就好。当然大致还是说明下安全生产的基本要求:
- 为storm创建独有的用户,并且开放用户对配置文件中data文件夹的全权。
- 对外开放一下端口(配置文件可以修改,不要照搬):
- zookeeper:2181,2888,3888
- storm.supervisor:6700,6701,6702,6703
- storm.UI:9090
- storm.nimbus:6627
- 一些其他常用的网络通讯端口
- 因为storm的个个模块是设计成快速启动和结束的,也就是说他不会自我恢复。所以守护进程也是个很重要的手段。