一个实时流处理框架
1、什么storm??
Storm是一个实时的、分布式、高可靠性、可维护性以及具备高容错的异步流式计算框架;它是逐条处理数据的;它的架构主要有Nimbus,Supervisor,worker;编程模型:DAG、spout、Bolt;高可靠性体现在异常处理和消息的可靠性保障机制;可维护性体现在:提供UI界面图形化监控端口;它是一个基于内存的处理框架;
Storm的计算模型:
spout--数据源,拓扑中数据的来源。一般会从指定外部的数据源读取元组发送到拓扑中;一个spout可以发送多个数据流;spout中最核心的方法时next Tuple,该方法会被storm线程不断调用、主动从数据源拉取数据,再通过emit方法将数据生成元组发送给之后的Bolt计算。
Blot--数据流处理组件,拓扑中数据处理均由Bolt完成。对于简单的任务或者数据流转换,单个bolt可以简单实现,复杂的场景往往需要多个bolt分多个步骤完成;一个Bolt可以发送多个数据流;bolt中最核心的方法时execute方法,该方法负责接收到一个元组数据、真正实现核心的业务逻辑。
Storm grouping--数据流分组(数据分发策略),有shuffle grouping随机分组,field grouping按字段分组,all grouping广播发送,global grouping全局分组,nonegrouping不分组,direct grouping指向型分组,local or shuffle grouping本地或随机分组,customgrouping自定义分组。
2、了解storm的架构吗??
主要是Nimbus、Supervisor、Worker和zookeeper:Nimbus主要作用是--资源调度,任务分配,接收jar包;Supervisor--接收nimbus分配的任务,启动、停止自己管理的worker进程;worker--运行具体处理运算组件的进程,启动executor,一般默认一个executor负责一个task任务;worker的任务类型有spout任务和bolt任务;zookeeper负责管理集群;
具体的任务提交流程如下:
1. 了解storm的机制??
我看过他的通信机制和容错机制:
通信机制主要有这几个方面:ZeroMQ开源的消息传递框架,Netty基于NIO的网络框架,更加高效;worker内部实现了“队列”的功能,可以理解为一种事件监听或者消息处理机制,也就是队列当中一边由生产者放入消息数据,另一边消费者并行取出消息数据处理。
容错机制主要体现在这几方面:nimbus服务器上,配置集群防止服务器挂掉,非nimbus服务器发生故障时,该节点上的所有任务都会超时,nimbus会将这些task任务重新分配到其他服务器上运行;
进程挂掉时:worker进程挂掉后,supervisor会重新启动这个进程,如果一直启动失败,无法向nimbus发送心跳,nimbus会将该worker重新分配到其他服务器上;
Supervisor挂掉:无状态(所有的状态信息都存放在zookeeper中来管理),快速失败;
Nimbus挂掉:无状态(所有的状态信息都存放在zookeeper中来管理),快速失败;
消息的完整性:从spout中发出的tuple,以及基于它所产生tuple构成一棵tuple树,当其发送完成,并且树当中每一条消息都被正确处理,就标明spout发送消息被“完整处理”,即消息的完整性。实现机制--acker,负责跟踪每个spout发出的tuple的DAG。