Storm

storm

  • storm 是个实时的,分布式以及具备高容错的计算框架
    storm进程常驻内存
    storm数据不经过磁盘,在内存中处理

官网
架构:

  • Nimbus 主节点
  • Supervisor 从节点
  • Worker 从节点上工作进程

###编程模型:

  • spout + bolt
  • 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)数据、真正实现核心的业务逻辑
StreamGroup 数据流分组(即数据分发策略)

数据传输:

  • zmq
  • Netty

高可靠性

  • 异常处理
  • 消息可靠性保障机制ACK

可维护性

  • StormUI图形化监控接口
流式处理

流式处理(异步,同步)

异步服务
  • 与客户端提交数据进行结算,并不会等待数据计算结果

逐条处理
例如:ETL

统计分析

  • 例:计算PV、UV、访问热点 以及 某些数据的聚合、加和、平均等
    客户端提交数据之后,计算完成结果存储到Redis、HBase、MySQL或者其他MQ当中,
    客户端并不关心最终结果是多少。在这里插入图片描述
实时请求

实时请求应答服务(同步)

  • 客户端提交数据请求之后,立即取得计算结果并返回给客户端

Drpc

实时请求处理
在这里插入图片描述

storm 和 mapreduce

storm: 进程。线程常驻内存运行,数据不进入磁盘,数据通过网络传递
mapreduce 为 TB.pb级别数据设计的批处理计算框架
在这里插入图片描述

storm 和 spark Streaming
  • storm: 纯流式处理
    • 专门为流式处理设计
    • 数据传输模式更为简单,很多地方也更高效
    • 并不是不能做批处理。也可以做微批处理,来提高吞吐
  • spark Streaming 微批处理
    • 将rdd做的很小来用小的批处理来接近流失处理
    • 基于内存和DAG可以把处理任务做的很快
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值