一、目标

* 分清流式计算和批量计算各自的适用场景
* 使用storm开发流式计算程序
* 知道流式计算中时效性和正确性的取舍
二、storm是什么?

开源的、分布式、流式计算系统

三、分布式起源

* 数据量大+增长太快–>分布式
* 把一个任务拆解给多个计算机去执行,对外只提供一个接口
* google发表了三篇论文:Google File System、Big
Table、MapReduce,大神被启发开发出了Hadoop,Hadoop成为分布式的代表,形成Hadoop生态系统。
四、批量计算与流式计算的对比



流式计算+批量计算的API:推特的summing bird、谷歌的CloudDataFlow,接口均开源。

五、storm组件



主从结构:简单、高效,但主节点存在单点问题

对称结构:复杂、效率较低,但无单点问题,更加可靠

* Nimbus:主节点、只负责整体分配工作、不具体干活、老板
* Superior:从节点、直接管理干活的Worker、小组经理
* Worker:真正干活(Task)的进程
六、Storm作业提交流程

1.用户编写Storm Topolgy
2.使用Client提交Topology给Nimbus
3.Nimbus指派Tast给Supervisor
4.Supervisor为Task启动Worker
5.Worker执行Task

作业=Topology=拓扑


七、并发机制

* Task数量 :逻辑数量
* Worker数量 :进程数
* Executor数量:线程数
八、grouping分组方式



九、数据可靠性

分布式计算经常需要保证任意的worker挂掉之后,数据依然能够正确的处理。

故障处理:

Nimbus故障,换台机器重启即可
Superior挂掉,迁移其上Worker即可
Worker挂掉,迁移走数据能正确处理吗?

Spout数据保障:

如何保证数据正确的恢复?
如何保证数据不被重复计算?

* 不丢:Acker机制保证数据如果未成功处理,可以及时发现并通知Spout重发
* 不重:使用msgID去重
参考 <https://www.imooc.com/learn/461>