storm分布式流式计算框架。
nimbus:主进程服务(职责就是任务的分配的,程序的分发)
supervisor:工作进程服务(职责就是启动线程池,接受任务,运行任务,报告任务的运行状态)
注意容错:supervisor与nimbus都是基于zookeeper来实现容错,任务运行的元数据存储的zk里面,如果工作节点宕机,zk可以发现,执行触发机制,通知nimbus,对任务进行重新的分发。
下面看一下提供的编程模型
===================================
实现IRichSpout接口(BaseRichSpout),表示此处就是数据的源(1.设置数据格式-字段,2.初始化业务对象,3.处理完数据之后发送数据到下游) []
@Override public void declareOutputFields(OutputFieldsDeclarer arg0) { //设置输出的数据格式字段 } @Override public void open(Map arg0, TopologyContext arg1,SpoutOutputCollector arg2) { //首先获取到SpoutOutputCollector //初始化相关的参数数据 } @Override public void nextTuple() { //开始处理数据 }
实现IRichBolt接口(BaseBasicBolt ),表示对数据的处理逻辑接口(初始化对象,处理数据,发送到下游继续处理)
@Override public void prepare(Map arg0, TopologyContext arg1, OutputCollector arg2) { //初始化相关的参数对象OutputCollector } @Override public void declareOutputFields(OutputFieldsDeclarer arg0) { //声明处理输出的字段数据 } @Override public void execute(Tuple arg0) { //处理业务数据接口 }
组装通过Topology实现,设置spout,bolt的pie流程关系,设置任务的名称以及并行度等参数,此类里面有个main函数就是执行的入口函数。
spout源端的实现比如常见的MQ消息,因为实时的数据处理为了降低耦合度以及并发基本采用的都是类似的模式。
原文:http://www.cnblogs.com/gstsyyb/p/5097192.html