storm本地模式,处理模拟集群环境,快速进行开发。
1:storm体系结构
(1):Nimbus主节点:
① 主节点通常运行一个后台程序-Nimbus,用于响应分布在集群中的节点,分配任务和监控故障
(2):Supervisor工作节点:
① 工作节点同样会运行一个后台程序--Supervisor,用于收听工作指派基于要求运行工作进程,每一个工作节点是topology中一个子集的实现,主节点和从节点的协调通过zk来进行
(3):zk
① zk是完成主节点和从节点之间协调的服务,而应用程序实时的逻辑被封装到storm中的topology,topology是一组由Spouts和spot通过stream grouping进行连接的图
(4):Topology拓扑(就是程序,流程)
① storm中运行的一个实时应用程序,因为各组件之间的消息流动形成逻辑上的一个拓扑结构,一个topology是spouts(数据源)和bolts(处理数据的)组成的图,通过stream groupings将图中的spouts和bolts连接起来
2:topology
topology是一个有向的流程图,
3:stream grouping:为每一个bolt指定哪一个流作为输入,流分组定义了如何在bolt的任务直接进行分发。
流分组的方式:
(1):Shuffle Grouping,随机分组;保证每一个bolt接收到的tuple数目相同
(2):Fields Grouping,按字段分组;比如按照userId进行分组,具有同样userId的tuple会被分到相同的Bolts中,具有不同样userId的tuple会分到不同的Bolts中
(3):ALL Grouping,广播分组,对于每一个tuple,会分到每一个Bolts中
(4):Global Grouping 全局分组:这个tuple会被分发到storm的一个bolt中的task。再具体点就是分配到id值最低的那个task上。
4:cleanUp方法会在服务器停止之前调用(属于bolt的一个方法)
5:消息可靠性【节点描记工作】,如果消息不能被处理而丢失是很严重的情况。storm也是支持消息可靠性支持的。只有bolt节点进行描记成功或者失败才会调用spot节点的成功或者失败方法。ack或者fail方法。没法做到细致的事物操作,可以使用幂等性去判断。storm保证性的话使用ack保证机制。storm消息可靠性通过树来完成的【一个消息被拆分成为两个,这两个又被拆分成4个。。。。】
6:storm的RPC【distributed RPC】分布式RPC【贼牛逼功能】
storm里面引入DRPC主要利用storm的实时计算能力来并行化CPU密集型的计算任务。DRPC的storm topology以函数的参数流作为输入,而把这些函数调用的返回值作为topology的输出流。DRPC其实并不能算为storm本身的一个特性。
DRPC通俗讲就是利用Java形成一个client端,然后程序调用这个client,通过这个client执行storm中的某一个topology,然后快速返回结果。开启DRPC之后就不用使用spout数据源输入数据
DRPC的整体工作流程:
(1):接受一个RPC请求
(2):请求发送到storm topology
(3):从storm topology接受结果
(4):把结果发送给等待的客户端。