1 Storm介绍
Storm是开源的分布式实时大数据处理框架,用于信息流处理和持续性计算。
技术 | 延迟性 | 开发难度 | 本质 |
---|---|---|---|
Storm | 毫秒级 | 较难 | 流计算,逐行或逐批次计算。按行数处理。 |
Spark Streaming | 数十秒或分钟 | 简单 | 按短小时间片段的批处理,比如2s一个时间片。按时间片处理。 |
Jstorm是阿里基于storm在网络io、线程模型、资源调度、可用性及稳定性上做了持续改进的版本。将storm用java重写。
Jstorm和Storm的区别:http://luoshi0801.iteye.com/blog/2168848
2 Storm集群架构
主节点 | 排行 | 作业 | |
---|---|---|---|
Storm | Nimbus | Supervisor | topologies(拓扑),死循环 |
Mapreduce | Jobtracker | Tasktracker | MapReduce Job,执行完自动结束 |
Niubus - > Zookeeper - > Supervisor
Nimbus 和 Supervisors 之间所有的协调工作通过 Zookeeper 集群协调,Nimbus 进程和 Supervisors 进程是无法直接连接和无状态的,所有状态维持在Zookeeper中或保存在本地磁盘上。
kill -9 Nimbus/Supervisor
杀死进程,不需要备份。
3 Strom工作原理
Nimbus 负责在集群topo的jar的上传并分发到每个Supervisor,topo只能提交在Nimbus上提交,将任务分配给其他机器。
Supervisor 监听分配给它的 Zookeeper 节点,根据 Nimbus 的委派在必要时启动和关闭工作进程(拉起worker进程,分配给worker资源,并委派任务)。每个工作进程执行 topology 的一个子集。一个运行中的 topology 由多个不同机器的工作进程(worker)组成。
Storm 是对流的处理,流是一个不间断的无界的连续 tuple ,流中的事件就是tuple,即元组。
每个 stream 都有一个获取消息源的组件,即Spout。Spout 可以是可靠的也可以是不可靠的。可靠的消息源可以重新发射一个处理失败的 tuple ,一个不可靠的消息源 Spout 不会。
处理 stream 内的 tuple ,抽象为 Bolt ,bolt可以消费任意数量的输入流,只要将流方向导向该bolt,同时可以发送新的流给其他bolt。由spout得到数据,交给bolt处理,形成的有向无环图就是 topology 。
spout 和 bolt 被称为组件,发送 tuple 的方式称为广播方式。
tuple 是一个值列表 value list,list 中的每列 value 都有一个 name,并且该 value 可以是任意可序列化的类型。拓扑的每个节点都要说明它发射出的元组的字段 name,其他节点需要订阅name接受处理。
UI、Nimbus(主节点)、Supervisor(各服务器子节点)、worker(服务器拉起的一个工作进程)、Executor、task(一个任务线程)是物理概念,Spout、Bolt、Topology 是任务相关的虚拟概念。
Spout 类方法 open 进行初始化,nextTuple 不断发射 tuple 到 topology,storm 在检测到一个 tuple 被整个 topology 成功处理的时候调用 ack,否则调用 fail。Storm 只对可靠的 Spout 调用 ack 和 fail。
Bolt 进行消息的处理:过滤、聚合、查询数据库等,主要方式是 execute (死循环)连续处理传入的 tuple ,成功处理完每一个 tuple 后回调 OutputCollector 的 ack 方法,通知 Storm 该 tuple 处理完成。处理失败时,回调 fail 方法通知 Spout 端可以重新发送该 tuple。