zoukankan      html  css  js  c++  java
  • 【Storm篇】--Storm基础概念

    一、前述

    Storm是个实时的、分布式以及具备高容错的计算系统,Storm进程常驻内存 ,Storm数据不经过磁盘,在内存中处理。

    二、相关概念

    1.异步:

    流式处理(异步)
    客户端提交数据进行结算,并不会等待数据计算结果。


    2.同步:

    实时请求应答服务(同步)
    客户端提交数据请求之后,立刻取得计算结果并返回给客户端。

    3.Storm,Sparkstreaming,Mapreduce相关概念比较:

    Storm:(实时处理)

    专门为流式处理设计
    数据传输模式更为简单,很多地方也更为高效
    并不是不能做批处理,它也可以来做微批处理,来提高吞吐。

    Spark Streaming:微批处理
    将RDD做的很小来用小的批处理来接近流式处理
    基于内存和DAG可以把处理任务做的很快。

    MapReduce:

    Storm:进程、线程常驻内存运行,数据不进入磁盘,数据通过网络传递。
    MapReduce:为TB、PB级别数据设计的批处理计算框架。

    4.Storm 计算模型

    Topology – DAG有向无环图的实现(拓扑图)

    对于Storm实时计算逻辑的封装
    即,由一系列通过数据流相互关联的Spout、Bolt所组成的拓扑结构
    生命周期:此拓扑只要启动就会一直在集群中运行,直到手动将其kill,否则不会终止
        (区别于MapReduce当中的Job,MR当中的Job在计算执行完成就会终止)。

    Tuple – 元组
    Stream中最小数据组成单元

    Stream – 数据流
    从Spout中源源不断传递数据给Bolt、以及上一个Bolt传递数据给下一个Bolt,所形成的这些数据通道即叫做Stream
    Stream声明时需给其指定一个Id(默认为Default)
    实际开发场景中,多使用单一数据流,此时不需要单独指定StreamId

    Spout – 数据源
    拓扑中数据流的来源。一般会从指定外部的数据源读取元组(Tuple)发送到拓扑(Topology)中
    一个Spout可以发送多个数据流(Stream)
    可先通过OutputFieldsDeclarer中的declare方法声明定义的不同数据流,发送数据时通过SpoutOutputCollector中的emit方法指定数据流Id(streamId)参数将数据发送出去
    Spout中最核心的方法是nextTuple,该方法会被Storm线程不断调用、主动从数据源拉取数据,再通过emit方法将数据生成元组(Tuple)发送给之后的Bolt计算

    Bolt – 数据流处理组件
    拓扑中数据处理均有Bolt完成。对于简单的任务或者数据流转换,单个Bolt可以简单实现;更加复杂场景往往需要多个Bolt分多个步骤完成
    一个Bolt可以发送多个数据流(Stream)
    可先通过OutputFieldsDeclarer中的declare方法声明定义的不同数据流,发送数据时通过SpoutOutputCollector中的emit方法指定数据流Id(streamId)参数将数据发送出去
    Bolt中最核心的方法是execute方法,该方法负责接收到一个元组(Tuple)数据、真正实现核心的业务逻辑

  • 相关阅读:
    学习Java书籍推荐和面试网站推荐
    Java 多线程学习扩展
    Java Excel 导入导出(二)
    Java Excel 导入导出(一)
    Matplotlib库(二)
    Matplotlib库(一)
    【转】MATLAB导出精美的论文插图
    图像的手绘效果
    Numpy库的使用(二)
    Numpy库的使用(一)
  • 原文地址:https://www.cnblogs.com/LHWorldBlog/p/8352845.html
Copyright © 2011-2022 走看看