千家信息网

Storm工作原理是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这期内容当中小编将会给大家带来有关Storm工作原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 Storm 是什么Storm是一个分布式的实时计算框架;
千家信息网最后更新 2026年11月03日Storm工作原理是什么

这期内容当中小编将会给大家带来有关Storm工作原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

1 Storm 是什么

Storm是一个分布式的实时计算框架;按照作者 Nathan Marz 的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。

Storm是流式计算框架、实时计算框架, 而Hadoop本质上是一个批处理框架、离线计算框架。

Storm的核心代码用的是clojure,另一部分代码用python;开发用户可使用java开发topology。

2 Storm的工作流程

Storm集群中有两种节点,一种是Nimbus(控制结点),另一种是Supervisor(工作节点)。它们是这样工作的:
1. 客户端提交topology到Nimbus;
2. Nimbus为该topology创建本地目录,将topology拆分为一个个的task;
3. 在zookeeper上创建assignments节点,以存储task与supervisor节点中woker的对应关系;
4. 在zookeeper上创建taskbeats节点来监控task的心跳,启动topology;
5. Supervisor轮询zookeeper,认领分配给自己的tasks,启动多个woker进程,每个work创建相应的task线程;根据topology信息进行初始化task之间的连接,最终整个拓扑运行起来。

Topology处理流程图:

3 Zookeeper集群

Storm使用zookeeper来协调整个集群,但是要注意的是storm并不用zookeeper来传递消息。所以zookeeper上的负载是非常低的,单个节点的zookeeper在大多数情况下都已经足够了, 但是如果你要部署大一点的storm集群, 那么你需要的zookeeper也要大一点。关于如何部署zookeeper,参考:http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html 。

部署zookeeper有些需要注意的地方:

  1. 对zookeeper做好监控非常重要, zookeeper是fail-fast的系统,只要出现什么错误就会退出。 更多细节见 http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html#sc_supervision 。

  2. 在storm的生产环境场景,要配置一个cron job来压缩zookeeper的数据和业务日志。zookeeper自己是不会去压缩这些的,所以你如果不设置一个cron job, 那么你很快就会发现磁盘不够用了,更多细节可查看:http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html#sc_maintenance 。

4 Topology的程序结构

和同样是计算框架的MapReduce相比,在MapReduce集群上运行的是Job,而在Storm集群上运行的是Topology。但是Job在运行完毕后会自行结束,Topology只能手动kill掉,否则会一直运行下去。

Storm不处理计算结果的保存,这是应用代码需要负责的事情,如果数据不大,你可以简单地保存在内存里,也可以每次都更新数据库,也可以采用NoSQL存储。这部分事情完全交给应用开发者。

Topology的结构图:

4.1 Component

上图中,Spout 和Bolt都是 Component。所以,Storm定义了一个名叫IComponent的总接口。 家族类图如下:绿色部分是我们最常用、比较简单的部分;红色部分是与事务相关的。

4.2 Spout

Spout是Stream的消息产生源, Spout组件的实现可以通过继承BaseRichSpout类或者其他Spout类来完成,也可以通过实现IRichSpout接口来实现:

public interface ISpout extends Serializable {   void open(Map conf, TopologyContext context, SpoutOutputCollector collector);   void close();   void nextTuple();   void ack(Object msgId);   void fail(Object msgId); }
  • open() -- 初始化方法

  • close() -- 在该spout将要关闭时调用。但是不保证其一定被调用,因为在集群中supervisor节点,可以使用kill -9来杀死worker进程。只有当Storm是在本地模式下运行,如果是发送停止命令,可以保证close的执行。

  • ack(Object msgId) -- 成功处理tuple时回调的方法,通常情况下,此方法的实现是将消息队列中的消息移除,防止消息重放

  • fail(Object msgId) -- 处理tuple失败时回调的方法,通常情况下,此方法的实现是将消息放回消息队列中然后在稍后时间里重放。

  • nextTuple() -- 这是Spout类中最重要的一个方法。发射一个Tuple到Topology都是通过这个方法来实现的。调用此方法时,storm向spout发出请求, 让spout发出元组(tuple)到输出器(ouput collector)。这种方法应该是非阻塞的,所以spout如果没有元组发出,这个方法应该返回。nextTuple、ack 和fail 都在spout任务的同一个线程中被循环调用。 当没有元组的发射时,应该让nextTuple睡眠一个很短的时间(如一毫秒),以免浪费太多的CPU。

继承了BaseRichSpout后,不用实现close()、activate()、 deactivate()、ack()、fail() 和 getComponentConfiguration(),只关心最基本核心的部分。 通常情况下(Shell和事务型的除外),实现一个Spout,可以直接实现接口IRichSpout,如果不想写多余的代码,可以直接继承BaseRichSpout。

4.3 Bolt

Bolt类接收由Spout或者其他上游Bolt类发来的Tuple,对其进行处理。Bolt组件的实现可以通过继承BasicRichBolt类或者IRichBolt接口等来完成。

  • prepare() -- 此方法和Spout中的open方法类似,在集群中一个worker中的task初始化时调用。 它提供了bolt执行的环境。

  • declareOutputFields() -- 用于声明当前Bolt发送的Tuple中包含的字段(field),和Spout中类似。

  • cleanup() -- 同ISpout的close方法,在关闭前调用。同样不保证其一定执行。

  • execute() -- 这是Bolt中最关键的一个方法,对于Tuple的处理都可以放到此方法中进行。具体的发送是通过emit方法来完成的。execute接受一个 tuple进行处理,并用prepare方法传入的OutputCollector的ack方法(表示成功)或fail(表示失败)来反馈处理结果。

Storm提供了IBasicBolt接口,其目的就是实现该接口的Bolt不用在代码中提供反馈结果了,Storm内部会自动反馈成功。如果你确实要反馈失败,可以抛出FailedException。 通常情况下,实现一个Bolt,可以实现IRichBolt接口或继承BaseRichBolt,如果不想自己处理结果反馈,可以实现 IBasicBolt接口或继承BaseBasicBolt,它实际上相当于自动实现了collector.emit.ack(inputTuple)。

5 Topology的运行方式

在开始创建项目之前,了解Storm的操作模式(operation modes)是很重要的。 Storm有两种运行方式:

  • 本地运行的提交方式:

LocalCluster cluster = new LocalCluster(); cluster.submitTopology(TOPOLOGY_NAME, conf, builder.createTopology()); Thread.sleep(2000); cluster.shutdown();
  • 分布式提交方式:

StormSubmitter.submitTopology(TOPOLOGY_NAME, conf, builder.createTopology());

需要注意的是,在编写完Topology代码之后,需要打包成jar,然后放到Nimbus上运行。打包的时候,不需要把依赖的storm.jar打进去,否则运行时会报错。因为在集群模式下,topology是依赖集群环境而执行的(见storm.yaml 配置文件)。

运行命令如下: storm jar StormTopology.jar mainclass [args]

上述就是小编为大家分享的Storm工作原理是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

方法 运行 集群 处理 接口 消息 节点 代码 框架 工作 情况 此方法 方式 结果 部分 重要 成功 不用 可以通过 实时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 互联网金融 科技 互联网科技公司怎么样 猫创互联网科技 北京三清互联网科技 中盈科技互联网信息有限公司 新华互联网科技2019 阿里互联网科技公司 南平创想时代互联网科技有限公司 晓花互联网科技有限公司网址 互联网媒体平台算高科技产业 深圳市优智互联网科技有限公司 互联网新科技动漫ppt素材 科技大学互联网 北京市互联网新科技 富国互联网科技002692 广州燕处互联网科技有限公司 互联网金融运营模式中的金融科技 绵阳真晨互联网科技有限公司 科技互联网专业工作会议发言稿 苏州找大状互联网科技有限公司 重庆互联网络科技 金融科技与互联网金融 华中科技大学互联网 深圳期待互联网科技 山东子淼互联网科技有限公司 保山互联网科技靠谱吗 福仕德教育科技互联网 互联网科技创业有什么好项目 互联网科技快速发展优美句子
0