Storm体系概要

体系概要

Storm发展历史

Storm相关术语

Storm原理分析

Storm主要特点

Storm的扩展:与YARN的结合

Storm的现状与发展趋势

1、Storm发展历史

Storm体系概要

2、Storm相关术语

1)Nimbus

Storm集群主节点,负责资源分配和任务调度

2)Supervisor

Storm集群工作节点,接收Nimbus分配任务,管理Worker。

3)Worker

Supervisor下的工作进程,具体任务执行。

4)Task

Worker下的工作线程,0.8版本之后表示逻辑线程。

5)Topology

实时计算逻辑,计算拓扑,由Spout和Bolt组成的图状结构。

6)Spout

Storm编程模型中的消息源,可进行可靠传输(ack/fail机制)。

7)Bolt

Storm编程模型中的处理组件,定义execute方法进行实际的数据逻辑处理。

8)Stream

拓扑中的消息流,传输的对象是Tuple

9)Tuple

一次消息传递的基本单元

10)Stream Groupings数据流分组策略

        Shuffle Grouping:随机分组,保证bolt接受的tuple数据相同。(常用)

        Fields Grouping:按字段分组,相同tuple会分到同一个bolt中。(常用)

        All Grouping:广播发送,每个tuple会发送所有bolt中。

        Global Grouping:全局分组,所有tuple发送给task_id最小的bolt。

        Non Grouping:不分组,效果与Shuffle相似,发布订阅同一个线程。

        Direct Grouping:直接分组,需要手动指定bolt。

        Custom Grouping:自定义分组,自己实现分组方式。

 

3、Storm原理架构

1)Storm集群架构图

Storm体系概要

      Zookeeper 高效开源的分布式应用协调服务,有leader节点和follower节点,leader节点负责写服务和数据的同步,follower节点负责读服务。奇数个。

      nimbus不支持高可用,如果nimbus出现故障,那么任务不会受到影响,但管理会出现问题,恢复只需要重新恢复nimbus。

2)数据处理流程图

Storm体系概要

3)拓扑图分析

Storm体系概要

 

 

4、Storm主要特点

1)简单的编程模型

       提供了简单的Spout+Bolt的编程模型,让普通的java开发工程师也能快速地、高效的写出高并发实时处理任务,大大地降低了相关业务处理的研发成本。

2)高扩展性

      首先就是节点的支持水平扩展,支持干级节点的扩展;

      工作进程的扩展,每个工作节点可以有多个工作进程;

       每个工作进程可以创建多个线程;

       每个线程又可以执行多个任务,任务才是真正进行数据处理的实体;

3)高可靠性

       消息以消息树的形式存在,提供ack/fial消息保证机制。

4)高容错性

      节点级别的容错;

      worker级别的容错;

      缺点:nimbus不支持容错

5)支持多语言编程

      内部实现多语言协议,通过ShellSpout、ShellBolt以及ShellProcess等API实现。

6)支持本地模式

7)高性能

      内部通讯采用ZeroMQ通讯,保证消息被快速处理。

 

5、Storm的扩展:与YARN的结合

       1、YARN介绍

             YARN是Hadoop在2.0中引入的资源管理系统,Hadoop的资源管理组件。

             1)Hadoop1.X系统MapReduce工作流程:JobTracker负责资源管理以及任务调度;TaskTracker负责监控所在机器资源以及监控task执行情况。

            2)架构存在的问题:JobTracker单点故障;JobTracker负荷过重;资源单一;资源分配不合理。

            3)Hadoop2.X解决方案:资源管理与任务调度拆分,Yarn负责资源管理。

                  Yarn组成:ResourceManager;NodeManager;ApplicationMaster;

     2、Storm与YARN结合优势

           1)资源的弹性计算;

           2)共享底层存储;

          3)支持多版本共存;

          4)整体架构的统一;

          主流:Yahoo!开源的Storm on Yarn;

          现状:不够稳定,离实际应用仍然需要一段时间;

    3、当前存在的几个问题

          1)增量资源请求受限

          难以将所有Storm服务运行在相邻的节点上,比如在同一个机架上,这是由于YARN自身不支持资源组调度,只能实现指定一个机架。

          2)nimbus故障切换,位置无法定位;

          nimbus运行在ApplicationMaster上,当它失效时,YARN进行ApplicationMaster重启,nimbus位置转移,导致客户端无法定位nimbus。

         3)NodeManager不支持动态升级;

         Storm的拓扑任务通常是不能随意停止的实时计算任务,进行NodeManager升级的时候,需要把实时任务停止。

 

6、Storm的现状与发展趋势

       1、Storm的应用场景

       1)流式数据处理(数据预处理、ETL等);

       2)并行计算Top N(按字段分组计算top,然后全局汇总);

       3)微批处理(在时间窗口内进行批量处理);

       4)分布式并行计算(DRPC);

      2、实时处理相关系统架构

       1)Yahoo!S4:扩展性不强,不支持数据容错,活跃度低;

       2)Storm on Yarn:源于Storm与Yarn;

       3)Spark Streaming:基于Spark,偏向于内存计算,实时性较差;

       4)Apache Samza:基于YARN,集成了Kafka,轻量;

       3、Storm与Hadoop的对比

       Hadoop偏向于离线数据处理,Storm偏向于数据的实时计算;

       1)编程模型很相似:Mapper对应Spout,Reducer对应Bolt;

       2)处理方向不同,Hadoop偏向于离线批处理,Storm实时处理;

       3)大数据处理架构中经常一同出现;

      4、Storm发展趋势

       1)Storm活跃情况(从社区、博客、Storm技术群);

       2)企业需求(大数据处理需求量增大,Storm技术属于加分项);

       3)大数据相关的大会,Storm专题数量上升;

       4)当前互联网数据量在增长,实时处理业务增多;