Storm入门之第一章
1、名词
spout龙卷,读取原始数据为bolt提供数据
bolt雷电,从spout或者其他的bolt接收数据,并处理数据,处理结果可作为其他bolt的数据源或最终结果
nimbus雨云,主节点的守护进程,负责为工作节点分发任务
topology 拓扑结构,Storm的一个任务单元
define field(s) 定义域,由spout或者bolt提供,被bolt接收
2、基础知识
Storm是一个分布式的,可靠的,容错的数据流处理系统。它会把工作任务委托给不同类型的组件,每个组件负责处理一项简单特定的任务。Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt,bolt可以把数据保存起来,也可以把数据传递给其他的bolt。
一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。
需求:统计播音员的字幕中出现哪些政治相关词,对应的次数,以及不同次数之间的偏差。
1、字幕作为数据输入流——Subtitles source
2、用一个spout读取一个文件(socket,通过HTTP,或者其他)——ReadSubtitles Spout
3、文本行被spout传给一个bolt,再被bolt按单词切割——SeparateWordsBolt
4、单词流被传给另一个bolt,在这里每个单词与一张政治人名列表比较。每遇到一个匹配的名词,第二个bolt在数据库中为这个名词加上1——PoliticanNameCounterBolt
可以随时查询数据库查看结果,而且这些技术是随着数据到达实时更新。
在整个Storm集群定义每个bolt和spout的并行性级别,就可以无限地扩展拓扑结构。
有哪些典型的Storm应用案例?
数据处理流——如上例,不像其他的流处理系统,Storm不需要中间队列
连续计算——连续发送数据到客户端,使它们能够实时更新并显示结果,如网站指标
分布式远程过程调用——频繁的CPU密集性操作并行化
3、Storm组件
对于一个Storm集群,一个连续运行的主节点组织若干节点工作。
在Storm集群中,有两类节点:主节点master node和工作节点worker nodes。主节点运行着一个叫做Nimbus的守护进程。这个守护进程负责在集群中分发代码,为工作节点分配任务,并监控故障,Supervisor守护进程作为拓扑的一部分运行在工作节点上。一个Storm拓扑结构在不同的机器上运行着众多的工作节点。
因为Storm在Zookeeper或者本地磁盘上维持所有的集群状态,守护进程可以是无状态的而且失效或重启时不会影响整个系统的健康。
在系统底层,Storm使用zeromq。这是一种先进,可嵌入的网络通讯库,它提供的绝妙功能使Storm成为可能。
下面列出一些zeromq的特性:
- 一个并行架构的Socket库
- 对于集群产品和超级计算,比TCP快
- 可通过inproc(进程内),IPC(进程间),TCP和multicase(多播协议)通信
- 异步IO的可扩展的多核消息传递应用程序
- 利用fanout(扇出)、pub-sub(发布订阅),pipeline(管道)、REQ-REP(请求答应)等实现N-N连接
备注:Storm用push/pull sockets
4、Storm的特性
- 简化编程:使用storm,大大降低实现实时处理的复杂性
- 开发简单:基于JVM的语言开发更容易,但是在Storm上可以使用其他任何语言进行开发,也有现成的中间见。
- 容错:Storm集群会关注工作节点状态,如果宕机必要的时候会重新分配任务
- 可扩展:所有需要为扩展集群所做的工作就是增加机器。Storm会在新机器就绪时向它们分配任务
- 可靠性:所有消息都可保证至少处理一次。如果出错了,消息可能处理不只一次,不过永远不会丢失消息。???(是不新版的zeromq支持持久化了?)
- 快速:速度是驱动Storm设计的一个关键因素
- 事务性:可以为几乎任何计算机得到恰好一次消息语义。
参考链接