Strom的编程模型和核心

版权声明:有一种生活不去经历不知其中艰辛,有一种艰辛不去体会,不会知道其中快乐,有一种快乐,没有拥有不知其中纯粹 https://blog.csdn.net/wwwzydcom/article/details/84949221

在这里插入图片描述

元组(Tuple)

消息传递的基本单元,是一个命名的值列表,元组中的字段可以是任何类型的对象,Storm使用元组作为其数据模型,元组支持所有的基本类型,字符串和字节数组作为字段值,只要实现类型的序列化接口就可以使用该类型的对象,元组本来映射是一个key-value的Map,但是由于各个组件间传递的元组的字段名称已经事先定义好,所以,只要按序把元组填入各个value即可,所以元组是一个value的List

流(Steam)

流是Storm的核心抽象,是一个无界的元组系列,源源不断传递的元组就组成了流,在分布式环境中并行地创建和处理

水龙头(Spout)

Spout是拓扑的流的来源,是一个拓扑中产生源数据流的组件,通常,Spout从外部数据源中读取数据,然后转换为拓扑内部的源数据

Spout是可以可靠或者不可靠,如果Strom处理元组失败,可靠的Spout能够重新发射,不可靠的Spout尽快忘记发出的元组

Spout可以发出超过一个流

Spout的主要方法是nextTuple(),NextTuple()会发出一个新的Tuple到拓扑,如果没有新的元组发出,则简单返回

Spout的其他方法是ack()和fail(),当Storm检测到一个元组从Spout发出时ack()和fail()就会被调用,要么成功完成通过拓扑,要么未能完成,ack()和fail()只能被可靠的Spout调用

IRichSpout是Spout必须实现的接口

转接头(Bolt)

在拓扑中所有处理都在Bolt中完成,Bolt是流的处理节点,从一个拓扑接收数据,然后执行进行处理的组件,Bolt可以完成过滤,业务处理,连接运算,连接与访问数据库等任何操作

Bolt是一个被动的角色,其接口中有一个execute()方法,在接收到消息后就会调用此方法,用户可以在其中执行自己希望的操作

Bolt可以完成简单的流的转换,而完成复杂的流的转换需要多个步骤,所以就需要多个Bolt

Bolt可以发出超过一个的流

拓扑(Topology)

拓扑(Topology)是Storm中运行的一个实时应用程序,因为各个组件间消息流动而形成逻辑上的拓扑结构

把实时应用程序的运行逻辑打成jar包后提交到Storm的拓扑(Topology),Storm的拓扑类似于MapReduce的作业(Job),其主要的区别是MapReduce的作业最终会完成,而一个拓扑永远都在运行,直到它被杀死,一个拓扑是一个图的Spout和Bolt的连接流分组

核心组件

在这里插入图片描述

nimbus是整个集群的控管核心,负责topology的提交,运行状态监控,任务重新分配等工作.

zk是一个管理者,监控者

总体描述:nimbus下命令(分配任务),zk监督执行(心跳监控,worker,supervisor的心跳都归它管)

supervisor下载代码,接受指令,创建worker和线程等

worker,excutor工作,task就是工作的具体内容

主控节点与工作节点

Storm集群中有两类节点:主控节点(Master Node)和工作节点(Worker Node) 其中,主控节点只有一个,而工作节点可以有多个

Nimbus进程与Supervisor进程

主控节点运行一个称为Nimbus的守护进程类似于Hadoop的JobTracker,Nimbus负责在集群中分发代码.对节点分配任务,并监视主机故障

每个工作节点运行一个称为supervisor的守护进程,Supervisor监听其主机上已经分配的主机的作业,启动和停止Nimbus已经分配的工作进程

流分组(Stream grouping)

流分组,是拓扑定义中的一部分,为每个Bolt指定应该接受哪个流作为输入,流分组定义了流/元组如何在bolt的任务之间进行分发

Storm内置了8种流分组方式

工作进程(Worker)

worker是spout/bolt中运行具体处理逻辑的进程,一个worker就是一个进程,进程里面包含多个线程

执行器(Executor)

一个线程就是一个executor,一个线程会处理一个或多个任务

任务(Task)

一个任务就是一个task

实时流计算常见架构图

后台系统 --> Flume集群 —> Kafka集群 (—>其他操作) —> storm集群—> redis集群

1)Flume获取数据。

2)Kafka临时保存数据。

3)Strom计算数据。

4)Redis是个内存数据库,用来保存数据。

猜你喜欢

转载自blog.csdn.net/wwwzydcom/article/details/84949221