Storm技术总结
阅读原文时间:2021年04月20日阅读:1

1.storm基本原语

spout : 消息源,不停的发送消息到集群中,我们主要的代码实现。

bolt : 消息处理节点,可以过滤,集合等,我们主要的代码实现。

topology : 整体的分布式计算结构,由多个spout和多个bolt组成。

tuple : 一次消息传递的基本单元,消息都封装为tuple,通过spout发送的集群。

整体数据流向为从固定数据源读取数据(比如kafka, rocketMQ等),数据封装为tuple,通过spout不停的发送消息,bolt对接收到的消息做处理,处理完成以后再丢给下个bolt处理,直到整个流程处理完成。storm只是提供一个计算的框架,真正的计算逻辑还是需要自己来写,当然storm本身也提供一些计算,聚合的类。

2.storm集群核心组件

 Nimbus主节点:storm的守护进程,管理集群中的节点,分配任务和监测故障。

 Supervisor工作节点:storm守护进程,管理worker来执行 spout/bolt task。

 Zookeeper:Supervisor和Nimbus之间协调的服务。

 Worker : 一个JVM,JVM里面会有多条spout,bolt线程在执行。一个supervisor可以有多个workers。

 Task:spout/bolt线程

 通过下面这个图,我们来简单的理解下整个集群是怎么工作的。

 1.首先我们建立storm集群由一个主节点nimbus,多个supervisor组成

 2.上传topology到nimbus,每个supervisor都会得到这个topology。到这一步整个集群搭建完成,等待数据进来。

 3.在数据进来之前,worker,spout,bolt都已经初始化完成,一个supervisor中有多少个worker,一个worker里面有多少个spout线程,多少个bolt线程都是可配置的。

 4.数据进来后,就通过spout不断的发送数据到bolt,bolt处理完成后就到下一个bolt,直到处理完成为止。

3.storm集群的并发性

我们可以通过下面的方式来提高整个storm的并发行,从而提高storm集群的效率。

 1.线程级 —— 增加spout和bolt的线程执行数量。

 2.worker级 —— 增加一个执行节点的worker数量。

 3.supervisor级 —— 增加执行节点。

4.数据流分组

storm集群由多个spout的task,多个bolt的task,数据通过spout发送到哪一个bolt的task,bolt处理完成的数据发送下面哪一个bolt就是数据流分组。

数据通过spout发送到bolt的方式,bolt发送到下一个bolt的方式就是数据分组。下面是8中分组方式,在不同的情景下使用不同的分组方式。

    1.shuffleGrouping(随机分组)

    2.fieldsGrouping(按照字段分组,在这里即是同一个单词只能发送给一个Bolt)

    3.allGrouping(广播发送,即每一个Tuple,每一个Bolt都会收到)

    4.globalGrouping(全局分组,将Tuple分配到task id值最低的task里面)

    5.noneGrouping(随机分派)

    6.directGrouping(直接分组,指定Tuple与Bolt的对应发送关系)

    7.Local or shuffle Grouping

    8.customGrouping (自定义的Grouping)

5.storm容错机制

1.集群节点宕机

  Worker —— Supervisor会重新启动这个进程。如果启动过程中仍然一直失败,并且无法向Nimbus发送心跳,Nimbus会将该Worker重新

  Nimbus服务器 —— 因为是单节点可以添加报警,但并不会影响supervisor的执行。

  Supervisor服务器 —— 该节点上所有Task任务都会超时,Nimbus会将这些Task任务重新分配到其他服务器上运行。 2.进程挂掉分配到其他服务器上。

3.消息的完整性

  spout和bolt处理的时候都有成功失败的反馈,如果失败spout会重新发送tuple。storm自己无法解决消息重复发送的问题。

6.storm相对于hadoop的优势。

  实时性,hadoop会先录入数据到HDFS中。

7.storm常见问题

 1.storm数据存放在哪里 —— storm不保存数据,数据的保存依赖我们自己来做。

 2.容错机制导致重复处理的问题 —— 自己解决,下面三种方式可参考:

(1)不处理,这也算是种策略。因为实时计算通常并不要求很高的精确度,后续的批处理计算会更正实时计算的误差。

(2)使用第三方集中存储来过滤,比如利用mysql,memcached或者redis根据逻辑主键来去重。

(3)使用bloom filter做过滤,简单高效。

 3.nimbus单节点的容错性怎么保证 —— 不保证,因为短时间类不会影响Supervisor节点的正常运行,不过最好加上报警,nimbus出问题后及时处理。

8.我的项目是怎么使用storm。

 storm本身对于计算,聚合函数并没有太多的支持,计算部分我们依赖于复杂事件处理引擎esper来进行数据的过滤和计算。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章