千家信息网

Storm是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"Storm是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Storm是什么如果只
千家信息网最后更新 2026年11月02日Storm是什么

本篇内容介绍了"Storm是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Storm是什么
如果只用一句话来描述storm的话,可能会是这样:分布式实时计算系统。按照storm作者的说法,storm对于实时计算的意义类似于 hadoop对于批处理的意义。我们都知道,根据google mapreduce来实现的hadoop为我们提供了map, reduce原语,使我们的批处理程序变得非常地简单和优美。同样,storm也为实时计算提供了一些简单优美的原语。
我们来看一下storm的适用场景。
1、流数据处理。 Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。
2、持续计算。连续发送数据到客户端,使它们能够实时更新并显示结果,如网站指标。
3、分布式rpc。由于storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式rpc框架来使用。当然,其实我们的搜索引擎本身也是一个分布式rpc系统。

Storm特点
Storm是一个开源的分布式实时计算系统,可以简单、可靠的处理大量的数据流。Storm有很多使用场景:如实时分析,在线机器学习,持续计算,分布式RPC,ETL等等。Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个结点每秒可以处理数以百万计的消息)。 Storm的部署和运维都很便捷,而且更为重要的是可以使用任意编程语言来开发应用。

Storm集群架构:

Nimbus主节点:
主节点通常运行一个后台程序 -- Nimbus,用于响应分布在集群中的节点,分配任务和监测故障。这个很类似亍Hadoop中的Job Tracker。

Supervisor工作节点:
工作节点同样会运行一个后台程序 -- Supervisor,用于收听工作指派并基于要求运行工作进程。每个工作节点都是topology中一个子集的实现。而Nimbus和Supervisor之间的协调则通过Zookeeper系统或者集群。

Zookeeper
Zookeeper是完成Supervisor和Nimbus之间协调的服务。而应用程序实现实时的逻辑则被封装进Storm中的"topology"。topology则是一组由Spouts(数据源)和Bolts(数据操作)通过Stream Groupings进行连接的图。

Topology(拓扑)
storm中运行的一个实时应用程序,因为各个组件间的消息流劢形成逻辑上的一个拓扑结构。一个topology是spouts和bolts组成的图, 通过stream groupings将图中的spouts和bolts连接起来,如下图:

一个topology会一直运行直到你手动kill掉,Storm自动重新分配执行失败的任务,并且Storm可以保证你不会有数据丢失(如果开启了高可靠性的话)。如果一些机器意外停机它上面的所有任务会被转移到其他机器上。
运行一个topology很简单。首先,把你所有的代码以及所依赖的jar打进一个jar包。然后运行类似下面的这个命令:
storm jar all-my-code.jar backtype.storm.MyTopology arg1 arg2
这个命令会运行主类: backtype.strom.MyTopology, 参数是arg1, arg2。这个类的main函数定义这个topology并且把它提交给Nimbus。 storm jar负责连接到Nimbus并且上传jar包。
Topology的定义是一个Thrift结构,并且Nimbus就是一个Thrift服务, 你可以提交由任何语言创建的topology。上面的是用JVM-based语言提交的最简单的方法。

Tuple
storm使用tuple来作为它的数据模型。每个tuple是一堆值,每个值有一个名字,并且每个值可以是任何类型, 在我的理解里面一个tuple可以看作一个没有方法的java对象。总体来看,storm支持所有的基本类型、字符串以及字节数组作为tuple的值类型。你也可以使用你自己定义的类型来作为值类型, 只要你实现对应的序列化器(serializer)。
一个Tuple代表数据流中的一个基本的处理单元,例如一条cookie日志,它可以包含多个Field,每个Field表示一个属性。
Tuple本来应该是一个Key-Value的Map,由于各个组件间传递的tuple的字段名称已经事先定义好了,所以Tuple只需要按序填入各个Value,所以就是一个Value List。
一个没有边界的、源源不断的、连续的Tuple序列就组成了Stream。

Stream
Stream是storm里面的关键抽象。一个stream是一个没有边界的tuple序列。 storm提供一些原语来分布式地、可靠地把一个stream传输进一个新的stream。比如: 你可以把一个tweets流传输到热门话题的流。
storm提供的最基本的处理stream的原语是spout和bolt。你可以实现Spout和Bolt对应的接口以处理你的应用的逻辑

Spout
消息源spout是Storm里面一个topology里面的消息生产者,简而言之,Spout从来源处读取数据并放入topology。 spout是流的源头。 比如一个spout可能从Kestrel队列里面读取消息并且把这些消息发射成一个流。又比如一个spout可以调用twitter的一个api并且把返回的tweets发射成一个流。
通常Spout会从外部数据源(队列、数据库等)读取数据,然后封装成Tuple形式,之后发送到Stream中。 Spout是一个主动的角色,在接口内部有个nextTuple函数,Storm框架会不停的调用该函数。

Bolt
Topology中所有的处理都由Bolt完成。即所有的消息处理逻辑被封装在bolts里面。 Bolt可以完成任何事,比如:连接的过滤、聚合、访问文件/数据库、等等。
Bolt处理输入的Stream,并产生新的输出Stream。 Bolt可以执行过滤、函数操作、 Join、操作数据库等任何操作。 Bolt是一个被动的角色,其接口中有一个execute(Tuple input)方法,在接收到消息后会调用此函数,用户可以在此方法中执行自己的处理逻辑。
Bolt从Spout中接收数据并进行处理,如果遇到复杂流的处理也可能将tuple发送给另一个Bolt进行处理。即需要经过很多blots。比如算出一堆图片里面被转发最多的图片就至少需要两步:第一步算出每个图片的转发数量。第二步找出转发最多的前10个图片。(如果要把这个过程做得更具有扩展性那么可能需要更多的步骤)。

Stream Groupings
Stream Grouping定义了一个流在Bolt任务间该如何被切分。 这里有storm提供的7个Stream Grouping类型:
1)随机分组(Shuffle grouping):随机分发tuple到Bolt的任务,保证每个任务获得相等数量的tuple。
2)字段分组(Fields grouping):根据指定字段分割数据流,并分组。例如,根据"user-id"字段,相同"user-id"的元组总是分发到同一个任务,不同"user-id"的元组可能分发到不同的任务。
3)全部分组(All grouping):tuple被复制到bolt的所有任务。这种类型需要谨慎使用。
4)全局分组(Global grouping):全部流都分配到bolt的同一个任务。明确地说,是分配给ID最小的那个task。
5)无分组(None grouping):你不需要关心流是如何分组。目前,无分组等效于随机分组。但最终,Storm将把无分组的Bolts放到Bolts或Spouts订阅它们的同一线程去执行(如果可能)。
6)直接分组(Direct grouping):这是一个特别的分组类型。元组生产者决定tuple由哪个元组处理者任务接收。
7) 本地或随机分组(Local or shuffle grouping):如果目标bolt有一个或多个任务在同一个的worker进程中,tuples会随机发送给这些任务。否则,就和普通的随机分组一样。
当然还可以实现CustomStreamGroupimg接口来定制自己需要的分组。

运行中的Topology主要由以下三个组件组成的:
Worker processes(进程)
Executors (threads)(线程)
Tasks

Worker:运行具体处理组件逻辑的进程。一个Topology可能会在一个或者多个Worker(工作进程)里面执行,每个worker是一个物理JVM并且执行整个Topology的一部分。storm会尽量均匀地将工作分配给所有的worker
executor:每个execcutor对应一个线程。1个executor是1个worker进程生成的1个线程。它可能运行着1个相同的组件(spout或bolt)的1个或多个task
Task:每个Spout或者Bolt会被当做很多task在整个集群中运行,在executor这个线程中运行一个或多个task

"Storm是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

处理 数据 分组 任务 运行 消息 分布式 类型 实时 工作 组件 节点 进程 逻辑 函数 多个 程序 线程 集群 分配 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技信息互联网 互联网科技媒体 互联网与未来科技 互联网科技的英文 火传媒上海互联网科技 掌上梦互联网科技 互联网 新科技 互联网科技公司需要的职位 科技与互联网的利与弊 贵州叶脉互联网科技有限公司所属行业 河南猎农互联网科技有限公司 杭州壁岐互联网科技有限公司 互联网科技与大数据专业 国大互联网教育科技有限公司工作 互联网科技和法律行业 怎样加入科技互联网 广州百诚互联网科技有限公司官网 互联网营销推广黑科技 吉林省码上互联网科技电话 数字科技和互联网金融哪个好 期待互联网科技 易通互联网络科技有限公司 伴你行互联网科技有限公司 重庆互联网医院沙龙医盟信息科技 互联网科技资金流入 互联网科技股为什么大涨 广州互联网高科技取餐柜 银川新华互联网科技学校原画 互联网科技大会大佬 互联网高科技绘画
0