为什么用Storm

它是一个分布式的开源、实现计算框架。可以轻松使用它处理流式数据,类似hadoop对数据进行批处理。
Storm的一些使用场景:
- realtime analytics
- online machine learning
- continuous computation
- distributed RPC
- ETL
Storm集成了常见数据库的操作方式。
这里写图片描述

Storm特性

  • 简化编程
  • 容错 Storm集群会关注工作节点状态,如果宕机了必要的时候会重新分配任务。
  • 可扩展 所有你需要为扩展集群所做的工作就是增加机器。Storm会在新机器就绪时向它们分配任务。
  • 可靠的 所有消息都可保证至少处理一次。如果出错了,消息可能处理不只一次,不过你永远不会丢失消息。
  • 快速 速度是驱动Storm设计的一个关键因素
  • 事务性

Storm集群两类结点

主控节点 Master Node

运行Nimbus的后台程序,负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态。类似于Hadoop中JobTracker的角色。

工作结点 Work Node

运行Supervisor的后台程序,负责监听从Nimbus分配给它执行的任务,据此启动呈停止执行任务的工作进程。每一个工作进程执行一个Topology子集;一个运行中的Topology由分布在不同工作节点上的多个工作进程组成。

  • Nimbus和Supervisor之间是由Zookeeper来协调工作的。
  • Nimbus和Supervisor进程都是快速失败和无状态的
  • Storm集群所有的状态要么在Zoopkeeper集群中,要么存储在本地磁盘上。如果kill -9杀死进程,它可以在重启后继续工作,以使得Storm运行稳定。

这里写图片描述

(经典的示意图)

系统底层,Storm使用了zeromq(http://www.zeromq.org)。它是一种可嵌入的网络通讯库:
- 一个并发架构的Socket库
- 对于集群产品和超级计算,比TCP要快
- 可通过inproc , IPC , TCP , Multicast通信
- 异步I/O可扩展的多核消息传递应用程序
- 利用fanout,PUB-SUB, Pipeline , REQ-REP 实现N-N连接。

Storm使用其push/pull sockets功能。

Spout

Storm集群的输入流由Spout管理,Spout把数据传递给bolt。
bolt可以把数据存储,或传递给其它bolt。
Storm 集群就是在一连串的bolt之间转换Spout传过来的数据。

可以使用Spout读取一个文件、socket、http等,Spout传给一个bolt,在bolt里传递的结果可以在数据库随时查看。

Topologies

在Storm上做实时计算,需要创建”Topology”,一个topology是一个计算过程的描述。它的每个节点包含处理逻辑,节点之间的连接表明了数据在节点之间是如何传递的。
这里的节点是指topology中计算过程的每一个步骤。

Streams

Storm 的核心抽象概念,相当于一个无限的tuple序列。Storm将一个stream转换成一个新stream的primitive.

数据模型

Storm使用tuple作数据模型。一个tuple是命名过的值列表,字段可以是任何类型对象。

参考:
http://storm.apache.org/releases/1.0.1/index.html
http://ifeve.com/getting-started-with-stom-index/

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐