最近因为公司的项目原因接触了Kafka+Storm的实时计算的项目,对于storm有了一个初步使用,记录下来希望能和大家一起讨论。
Storm是一个现在非常流行的实时计算的框架,现在网上有许多对于这个框架的介绍,依据Storm入门一书指出:
Storm是一个分布式的,可靠的,容错的数据流处理系统。它会把工作任务委托给不同类型的组件,每个组件负责处理一项简单特定的任务。Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt,bolt要么把数据保存到某种存储器,要么把数据传递给其它的bolt。你可以想象一下,一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。
从这里的揭示了Storm的运行流程,从spout接受数据源数据到各个bolt分别处理各个小的功能模块,这种计算单元之间的松散关系可以让许多bolt自由组合非常灵活的运用。
Storm有两类节点,一个是master node,一个是worker nodes,master node里面运行的是nimbus的守护进程负责各个worker nodes的代码同步,分配任务以及监控故障重新唤起,而worker nodes运行着supervisor守护进程作为Storm 拓扑的一部分。而Storm的所有状态信息都维护在zookeeper中,各个节点无状态,失效快速失败,不影响集群功能,并且会被快速重新唤起。
在系统底层,Storm使用了zeromq。这是一种先进的,可嵌入的网络通讯库,它提供的绝妙功能使Storm成为可能。zeromq有这几个特性:一个并发架构的Socket库,对于集群产品和超级计算,比TCP要快,可通过inproc(进程内), IPC(进程间), TCP和multicast(多播协议)通信,异步I / O的可扩展的多核消息传递应用程序,利用扇出(fanout), 发布订阅(PUB-SUB),管道(pipeline), 请求应答(REQ-REP),等方式实现N-N连接