其他分享
首页 > 其他分享> > 大数据开发技术之Storm原理与实践

大数据开发技术之Storm原理与实践

作者:互联网

一、Storm简介

1. 引例

在介绍Storm之前,我们先看一个日志统计的例子:假如我们想要根据用户的访问日志统计使用斗鱼客户端的用​大数据培训​户的地域分布情况,一般情况下我们会分这几步:

Hadoop貌似就可以轻松搞定:

如果有时效性要求呢?

Storm正好适合这种需求。

2. 特性

Storm是一个分布式实时流式计算平台。主要特性如下:

3. 与常用其他大数据计算平台对比

Storm vs. Spark Streaming Storm处理的是每次传入的一条数据,Spark Streaming实际处理的是微批量数据。

二、Storm的架构和运行时原理

1. 集群架构

如上图所示,一个典型的storm集群包含一个主控节点Nimbus,负责资源分配和任务调度;还有若干个子节点Supervisor,负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程;Nimbus和Supervisor之间的所有协调工作都是通过Zookeeper集群完成。

2. Storm的容错(Fault Tolerance)机制

Nimbus和Supervisor进程被设计成快速失败(fail fast)的(当遇到异常的情况,进程就会挂掉)并且是无状态的(状态都保存在Zookeeper或者在磁盘上)。

  1. Nimbus与Supervisor本身也是无状态的,状态信息是由zookeeper存储(实现了高可用,当nimbus挂掉,可以找另外一个节点启动nimbus进程,状态信息从zookeeper获得)。
  2. 在Nimbus进程失败后,可以快速重启恢复正常工作,不需要很长的时间来进行初始化和状态恢复。
  3. 当Nimbus从zookeeper得知有supervisor节点挂掉,可以将该节点的任务重新分配给其他子节点。
  4. Nimbus在“某种程度”上属于单点故障的。在实际中,即使Nimbus进程挂掉,也不会有灾难性的事情发生 。

当Nimbus挂掉会怎样?

  1. 已经存在的拓扑可以继续正常运行,但是不能提交新拓扑;
  2. 正在运行的worker进程仍然可以继续工作。而且当worker挂掉,Supervisor会一直重启worker。
  3. 失败的任务不会被分配到其他机器(是Nimbus的职责)上了

当一个Supervisor(slave节点)挂掉会怎样?

  1. 分配到这台机器的所有任务(task)会超时,Nimbus会把这些任务(task)重新分配给其他机器。当一个worker挂掉会怎么样?
  2. 当一个worker挂掉,Supervisor会重启它。如果启动一直失败那么此时worker也就不能和Nimbus保持心跳了,Nimbus会重新分配worker到其他机器

3. Storm的编程模型

Strom在运行中可分为spout与bolt两个组件,其中,数据源从spout开始,数据以tuple的方式发送到bolt,多个bolt可以串连起来,一个bolt也可以接入多个spot/bolt。运行时Topology如下图:

编程模型的一些基本概念:

- 随机分组(Shuffle grouping):随机分发tuple到Bolt的任务,保证每个任务获得相等数量的tuple。

- 字段分组(Fields grouping):根据指定字段分割数据流,并分组。例如,根据“user-id”字段,相同“user-id”的元组总是分发到同一个任务,不同“user-id”的元组可能分发到不同的任务。

- 全部分组(All grouping):tuple被复制到bolt的所有任务。这种类型需要谨慎使用。

- 全局分组(Global grouping):全部流都分配到bolt的同一个任务。明确地说,是分配给ID最小的那个task。

- 无分组(None grouping):你不需要关心流是如何分组。目前,无分组等效于随机分组。

- 直接分组(Direct grouping):这是一个特别的分组类型。元组生产者决定tuple由哪个元组处理者任务接收。

4. Storm消息处理的可靠性机制

可靠性机制(Ack机制)指的是Storm可以保证从Spout发出的每个消息都能被完全处理。一条消息被“完整处理”,指一个从Spout发出的元组所触发的消息树中所有的消息都被Storm处理了。如果在指定的超时时间里,这个Spout元组触发的消息树中有任何一个消息没有处理完,就认为这个Spout元组处理失败了。这个超时时间是通过每个拓扑的Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS配置项来进行配置的,默认是30秒。

Storm 是这样实现可靠性机制的:

5. Storm的并发机制

在一个 Storm 集群中,Storm 主要通过以下三个部件来运行拓扑:工作进程(worker processes)、执行器(executors)、任务(tasks)。三者的关系如下:

三、构建基于Storm的实时数据分析平台实战经验

构建基于Storm的实时数据分析平台,第一步当然应该是搭建storm集群。这个网上的教程还有轮子实在是太多,我就不贴出来了。请大家Google或者Baidu之,然后一步步搭建集群就完了。

1. Storm使用的一些实战经验

2. Storm编程实践-WordCount

 

标签:task,tuple,Spout,worker,实践,开发技术,Bolt,Storm
来源: https://www.cnblogs.com/xiaobaizaixianzhong/p/15571609.html