## 十 storm入门

### 8.1 什么是storm

- Apache Storm is 
  - a free and open source  开源免费
  - distributed 分布式
  - realtime computation system 实时计算系统
- Storm makes it easy 
  - to reliably process unbounded streams of data 可靠处理无界流数据
  - doing for realtime processing what Hadoop did for batch processing 像hadoop做批处理那样, 实时处理数据
- Storm is simple(简单), can be used with any programming language(支持多种开发语言)
- Storm has many use cases:  使用场景
  - realtime analytics, 实时分析
  - online machine learning,  在线机器学习
  - continuous computation, 持续计算
  - distributed RPC, ETL, and more. 分布式RPC 和 ETL[将数据抽取（extract）、交互转换（transform）、加载（load）至目的端的过程]
- Storm 特点:
  -  fast快: a benchmark clocked it at over **a million tuples processed per second per node**.
  - It is scalable 可伸缩
  - fault-tolerant, 容错
  - guarantees your data will be processed 保证数据能够处理
  - is easy to set up and operate. 易于设置和操作
- Storm integrates with the queueing and database technologies you already use. 
  - 可以和常用的消息队列以及数据库技术集成
- A Storm topology consumes streams of data and processes those streams in arbitrarily complex ways, repartitioning the streams between each stage of the computation however needed
- 小结: storm是一个实现高频数据和大规模数据实时处理的开源计算框架

### 8.2 storm发展历史

- storm 产生于 Twitter公司

  - 需求 大数据的实时处理
    - 健壮性
    - 扩展性/分布式
    - 如何使得数据不丢失, 不重复
    - 高性能 低延时

- storm 发展

  <table>
  <tr>
  <th>Version</th>
  <th>Release Date
  </th></tr>
  <tr>
  <td>1.2.2
  </td>
  <td>4 June 2018
  </td></tr>
  <tr>
  <td>1.2.1
  </td>
  <td>19 February 2018
  </td></tr>
  <tr>
  <td>1.1.1
  </td>
  <td>1 August 2017
  </td></tr>
  <tr>
  <td>1.0.4
  </td>
  <td>28 July 2017
  </td></tr>
  <tr>
  <td>1.1.0</td>
  <td>29 Mar 2017
  </td></tr>
  <tr>
  <td>1.0.0</td>
  <td>12 April 2016
  </td></tr>
  <tr>
  <td>0.10.0</td>
  <td>5 November 2015
  </td></tr>
  <tr>
  <td>0.9.6</td>
  <td>5 November 2015
  </td></tr>
  <tr>
  <td>0.9.5</td>
  <td>4 June 2015
  </td></tr>
  <tr>
  <td>0.9.4</td>
  <td>25 March 2015
  </td></tr>
  <tr>
  <td>0.9.3</td>
  <td>25 November 2014
  </td></tr>
  <tr>
  <td>0.9.2</td>
  <td>25 June 2014
  </td></tr>
  <tr>
  <td>0.9.1</td>
  <td>10 February 2014
  </td></tr>
  <tr>
  <th>Historical (non-Apache) Version</th>
  <th>Release Date</th></tr>
  <tr>
  <td>0.9.0</td>
  <td>8 December 2013
  </td></tr>
  <tr>
  <td>0.8.0</td>
  <td>2 August 2012
  </td></tr>
  <tr>
  <td>0.7.0</td>
  <td>28 February 2012
  </td></tr>
  <tr>
  <td>0.6.0</td>
  <td>15 December 2011
  </td></tr>
  <tr>
  <td>0.5.0</td>
  <td>19 September 2011
  </td></tr>
  </table>


### 8.3 storm 技术网站

- 官网 http://storm.apache.org
- GitHub https://github.com/apache/storm
- wiki https://en.wikipedia.org/wiki/Storm_(event_processor)

### 8.4 Storm V.S. Hadoop & Storm V.S. Spark Streaming

- storm 对比 hadoop 
  - 数据源/处理领域
  - 处理过程 
    - hadoop:map/reduce
    - storm: Spout Bolt
  - 进程是否结束
    - Hadoop map/reduce 处理完结束
    - storm 不能停
  - 处理速度
    - hadoop 慢 storm 快
  - 使用场景不同 离线计算

- Storm 对比 Spark Streaming

  ![Spark Streaming](img/streaming1.png)



  ![Spark Streaming](img/streaming2.png)

### 8.5 storm 的优势&应用

- storm优势
  - 编程模型 Spout Bolt   多语言
  - 扩展性
  - 可靠性 
  - 容错性
  - 速度快

- 应用案例

  - 一淘-实时分析系统：实时分析用户的属性，并反馈给搜索引擎。

    ​        最初，用户属性分析是通过每天在云梯上定时运行的MR job来完成的。为了满足实时性的要求，希望能够实时分析用户的行为日志，将最新的用户属性反馈给搜索引擎，能够为用户展现最贴近其当前需求的结果。

  -  携程-网站性能监控：实时分析系统监控携程网的网站性能。

    ​        利用HTML5提供的performance标准获得可用的指标，并记录日志。Storm集群实时分析日志和入库。使用DRPC聚合成报表，通过历史数据对比等判断规则，触发预警事件。

  - 阿里妈妈-用户画像：实时计算用户的兴趣数据。

    ​        为了更加精准投放广告，阿里妈妈后台计算引擎需要维护每个用户的兴趣点（理想状态是，你对什么感兴趣，就向你投放哪类广告）。用户兴趣主要基于用户的历史行为、用户的实时查询、用户的实时点击、用户的地理信息而得，其中实时查询、实时点击等用户行为都是实时数据。考虑到系统的实时性，阿里妈妈使用Storm维护用户兴趣数据，并在此基础上进行受众定向的广告投放。   

