关于stream杂谈,刚开始写博客,不好的敬请见谅

storm本地模式,处理模拟集群环境,快速进行开发。

1storm体系结构

(1)Nimbus主节点:

① 主节点通常运行一个后台程序-Nimbus,用于响应分布在集群中的节点,分配任务和监控故障

(2)Supervisor工作节点:

① 工作节点同样会运行一个后台程序--Supervisor,用于收听工作指派基于要求运行工作进程,每一个工作节点是topology中一个子集的实现,主节点和从节点的协调通过zk来进行

(3)zk

① zk是完成主节点和从节点之间协调的服务,而应用程序实时的逻辑被封装到storm中的topologytopology是一组由Spoutsspot通过stream grouping进行连接的图

(4)Topology拓扑(就是程序,流程)

① storm中运行的一个实时应用程序,因为各组件之间的消息流动形成逻辑上的一个拓扑结构,一个topologyspouts(数据源)和bolts(处理数据的)组成的图,通过stream groupings将图中的spoutsbolts连接起来

 

2topology

topology是一个有向的流程图,

3stream grouping:为每一个bolt指定哪一个流作为输入,流分组定义了如何在bolt的任务直接进行分发。

流分组的方式:

(1)Shuffle Grouping,随机分组;保证每一个bolt接收到的tuple数目相同

(2)Fields Grouping,按字段分组;比如按照userId进行分组,具有同样userIdtuple会被分到相同的Bolts中,具有不同样userIdtuple会分到不同的Bolts

(3)ALL Grouping,广播分组,对于每一个tuple,会分到每一个Bolts

(4)Global Grouping 全局分组:这个tuple会被分发到storm的一个bolt中的task。再具体点就是分配到id值最低的那个task上。

4cleanUp方法会在服务器停止之前调用(属于bolt的一个方法)

5:消息可靠性【节点描记工作】,如果消息不能被处理而丢失是很严重的情况。storm也是支持消息可靠性支持的。只有bolt节点进行描记成功或者失败才会调用spot节点的成功或者失败方法。ack或者fail方法。没法做到细致的事物操作,可以使用幂等性去判断。storm保证性的话使用ack保证机制。storm消息可靠性通过树来完成的【一个消息被拆分成为两个,这两个又被拆分成4个。。。。】

6stormRPCdistributed RPC】分布式RPC【贼牛逼功能】

storm里面引入DRPC主要利用storm的实时计算能力来并行化CPU密集型的计算任务。DRPCstorm topology以函数的参数流作为输入,而把这些函数调用的返回值作为topology的输出流。DRPC其实并不能算为storm本身的一个特性。

DRPC通俗讲就是利用Java形成一个client端,然后程序调用这个client,通过这个client执行storm中的某一个topology,然后快速返回结果。开启DRPC之后就不用使用spout数据源输入数据

DRPC的整体工作流程:

(1):接受一个RPC请求

(2):请求发送到storm topology

(3):从storm topology接受结果

(4):把结果发送给等待的客户端。

你可能感兴趣的:(stream)