Storm简介

作者: TZX_0710 | 来源:发表于2020-03-20 23:35 被阅读0次

    Storm是一个开源的分布式实时计算框架,可以简单、可靠的方式进行大数据流处理。通常用于实时分析,在线机器学习,次序计算,分布式RPC、ETL等场景。Storm具有如下特点

    支持水平横向拓展
    具有高容错性
    处理速度非常快,每个节点每秒能处理超过一百万个tuples(元组)
    易于操作和设置,并且可以与任何编程一起使用
    支持本地模式运行,开发简单
    支持图形化管理界面

    Storm对比Hadoop

    Hadoop采用mapreduce处理数据,而Mapreduce主要是对数据进行批处理,这使得Hadoop更适合于海量离线数据处理的场景。而Storm的设计目表是对数据进行实时计算

    Storm与SparkStreaming

    在前面讲解SparkStreaming的时候,已经提过SparkStreaming真正意义上并不能算做是一个流处理框架,SparkStreming接受实时数据,对数据拆分,然后进行微批处理。只不过SparkStreming可以将数据进行小粒度拆分,使得其能够接近于流处理的效果,但其本质上还是批处理(微批处理)

    Storm对比Flink

    Storm和Flink都是真正意义上的实时计算框架对比如下

    storm flink
    状态管理 无状态 有状态
    窗口支持 对事件窗口支持弱,缓存整个窗口的所有数据,窗口结束时一起计算 窗口支持较为完善,自带一些窗口聚合方法并且会自动管理窗口状态
    消息传递 At Most Once 、At Least Once At Most Once、At Least Once、Exactly Once
    容错方式 ACK 机制:对每个消息进行全链路跟踪,失败或者超时时候进行重发 检查点机制:通过分布式一致性快照机制,对数据流和算子状态进行保存。在发生错误时,使系统能够进行回滚。
    Storm流程图

    一、Storm核心概念

    1.Topologies(拓扑)

    一个完整Strom流处理程序被成为Strom topology。它是一个有SpoutsBlots通过Stream连接起来的有向无环图,Storm会保持每个提交到集群topology持续地运行,从而源源不断的数据流,直到你将其杀死为止。

    2. Stream流

    Stream是Storm中的核心概念。一个Stream是无界的、以分布式方式并行创建和处理的Tuple序列。Tuple可以包含大多数基本类型以及自定义类型的数据。简单来说Tuple是流数据的载体,Stream就是一系列Tuple

    3. Spouts

    Spouts是数据流的源头,一个Spout可以向不止一个Streams中发送数据。Spout通常分为可靠和不可靠。可靠的Spout能够在失败的时候重新发送Touple。不可靠的Spout一旦把Tuple发送出去就不关心其去处了。

    Bolts

    Bolts是流处理的处理单元,它可以从一个或多个Streams中接受数据,处理完成后再发射新的Streams中,Bolts可以执行过滤,聚合,连接等操作,并能与文件系统或者数据库交互。

    二、Stream groupings

    Stream Groupings
    注:一个圆圈表示一个Task

    Spouts和bolts在集群上执行任务时,是由多个Task并行执行的,当一个Tuple需要从BoltA 发送到BoltB执行的时候。这些操作都是由Stream groupings分组策略来决定的,Strom一共有8个内置的Stream Grouping 。用户也可以自己实现CustomStreamGrouping接口自定义实现。

    1. shuffle grouping

    Tuple随机的分发到每个Bolt的每个Task上,每个Bolt获取等量的Tuples

    2. Fields grouping

    Streams通过grouping指定的字段field来分组。假设通过userid字段进行分区,那么具有相同的user-id的Tuples就会发送到一个Task

    3. Partial Key grouping

    Streams通过grouping中指定的字段field来分组,与fields grouping相似。但是对于两个下游的Bolt来说是负载均衡的,可以在输入数据不平均的情况下更好的优化。

    4. All Grouping

    Streams 会被所有的Bolts的Task进行复制,但是会存在数据重复处理,所以需要谨慎使用。

    5. Global grouping

    整个Streams会进入Bolt的其中一个Task,通常会进入id最小的Task。

    6. None grouping

    当前的None grouping和shuffle grouping等价,随机分发

    7. Direct grouping

    Direct grouping 只能被用于 direct streams。使用这种方式需要由Tuple的生产者直接指定由哪个Task进行处理

    8. Local of shuffle grouping

    如果目标Bolt有Tasks和当前Bolt的Tasks在同一个worker进程,那么则优先将Tuple Shuffled到处于同一个进程的目标Bolt的Tasks上,可以减少网络传输,否则和Shuffle grouping一样处理

    Storm 架构

    三、Storm架构

    1.Nimbus进程

    也叫做Master Node,是Storm集群工作的全局指挥官。主要功能如下:

    1. 通过Thirft接口,监听接受client提交的topology
    2. 根据集群的Workers的资源情况,将Client提交到Topology进行任务分配,分配结果写入zookeeper
    3. 通过Thirft接口,监听Supervisor的下载Topology代码的请求,并且提供下载。
    4. 通过Thrift接口,监听UI对统计信息的读取,从zookeeper上读取统计信息,返回给UI。
    5. 若进程退出后,立即在本机重启,不影响集群运行

    2. Supervisor进程

    也叫做worker Node,是Storm集群的资源管理者,按需启动Workerj进程。主要功能如下

    1. 定时从zookeeper检查是否有新的Topology代码未下载到本地,删除旧的Topology代码
    2. 根据Nimbus的任务计划,在本机按需启动一个或者多个worker进程,并且监控进程情况。
    3. 若进程退出,则本机重启,不影响集群

    3. Worker进程

    Storm集群的任务构造者,构造spoult或Bolt的Task实例,启动Executor线程。主要功能如下:
    1.根据zookeeper上分配的Task,在本进程启动一个或者多个Executor线程,将构造好的Task实例交给Executor运行。

    1. 向zookeeper写入心跳
    2. 维持传输队列,发送Tuple到其他的Worker
    3. 若进程退出,立即本机重启,不影响集群

    4. Executor线程

    Storm集群的任务执行者,循环执行Task代码。执行一个或者多个Task,执行Acker机制,负责发送Task处理状态给对应的Spout所在worker

    5. zookeeper

    Nimbus和Supervisor进程都被设计为快速失败(遇到任何意外情况时进程自毁),和无状态(所有状态保存在zookeeper或磁盘上)。如果进程意外被销毁,重启的时候只需要从zookeeper上获取之前的状态数据即可,不会丢失数据。

    6. 并行度

    并行度
    1. 一个运行中的Topology由集群中的多个worker进程组成
    2. 默认情况下,每个worker进程默认启动一个线程
    3. 默认情况下 每个executor默认启动一个Task线程
    4. Task是组成Compoment的代码单元(spout或者Bolt)

    相关文章

      网友评论

        本文标题:Storm简介

        本文链接:https://www.haomeiwen.com/subject/vidjyhtx.html