Storm工作原理是什么

发布时间:2021-12-03 10:32:35 作者:柒染
来源:亿速云 阅读:172

这期内容当中小编将会给大家带来有关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处理流程图: Storm工作原理是什么

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的结构图:

Storm工作原理是什么

4.1 Component

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

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); 
}

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

4.3 Bolt

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

     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工作原理是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. storm记录--2-- Storm是什么
  2. storm topology优化思路是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

storm

上一篇:C#多线程练习题分析

下一篇:tk.Mybatis插入数据获取Id怎么实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》