storm 记录

网上的资料已经很好,并且是很多了,我在此只是写下我自己做storm应用时所遇到的问题
并且以下内容知识不会涉及到很全面的,注重个人体会,知识总结

随意搜的文章,感觉还不错
https://www.cnblogs.com/peak-c/p/6297794.html
https://blog.csdn.net/weiyongle1996/article/details/77142245
(上面链接比较详细,下面只是自己认为的知识重点)

我认为学习storm框架应该注重以下几个方面
(当然,这个是因人而异,或者是随着时间、认知的变化我还会从其他角度看问题)
架构体系
知识概念
使用说明
调优说明
代码深入
项目应用

架构体系
https://blog.csdn.net/weiyongle1996/article/details/77142245
可参考以上链接,原始的流出在于官方,我也没什么可以补充的了。
图中架构分为三部分
nimbus 主节点:负责storm的topology的提交,supervisor节点的管理等等
supervisor 从节点:负责具体代码的执行,其上面的重要概念有 worker task
zookeeper 分布式协调:zookeeper的特点,注定了可以作为元数据的管理,并且是分布式的,在其基础上催生出了许多优秀的项目
我所实际情况中遇到的有 dubbo、hbase、hadoop、kafka(也可以类别 spring cloud 中应用到的 eureka),其上保存的storm节点要注意研究一下。
架构体系是从大的方面让人一下子了解系统的结构,是给予外行和内行人看的,随着研究的深入,才能逐渐的明白架构图所表示的含义。

知识概念:
topology:Directed Acyclic Graph 有向环图的概念,对应于几何图形,以线连接的点组成的图形,流式的概念,流式的流向,抽象出来的点,组成有向无环图。
其中是组合Spout和Bolt的结构化的单位。
task:真实执行我们所写代码的逻辑概念,在worker内,作为调度的最小单元,在(Executor)线程内执行,对应关系默认是1:1,可通过代码的方式更改。
worker:对应于java的进程,属于Supervisor节点内的单元。
executor:对应于java的线程,属于worker内的调度单位,调优的关键
spout:数据源的来源,抽象的概念,我们做的系统大部分的结构都是,采集/输入 数据,系统加工,然后存储,反馈到相应的地方。
bolt:数据的加工处理阶段,流式的重要节点,可以多个流向处理。
stream:流式计算的核心。
stream group:流式大数据计算,和分而治之的概念应用处,在接触到MapReduce的概念后,你会知道Map的作用,拿支付宝每年的年度账单来类比,支付宝计算的数据量,我想不出来具体的多少。每年计算年度帐单时计算每个人的所有数据,便是通过Map的方式,将每一个用户的数据汇总到一起(Map阶段),然后计算(Reduce)出来(不知道具体的实现方式,只是无论它如何做,始终逃不过分而治之的思想)。
流式的分组,便是分而治之的开始。


使用说明
网上随处可见DEMO


调优说明:
主要有以下几点
线程的个数
数据库的连接数
...各种池化技术的池内资源数
maxSpoutPending spout获取的数据量直至处理完毕,作为一个周期
storm 重发机制的超时处理时间 TOPOLOGY_MESSAGE_TIMEOUT_SECS 默认30s,根据处理速度、资源节点数等调整
××(重点)处理速度(通过日志监控 blot内的执行逻辑时间,尽量小,采用计时的方式)
数据量
数据库索引(或NoSQL索引)

观察storm ui(监控spout处理压力,处理时长,处理失败数。bolt 处理时长,处理失败数,处理压力)


代码深入
了解storm的消息确认机制Ack


项目应用
我所用到的项目为用户行为分析系统,通过采取电商用户的用户操作历史,发送到kafka里面,storm按网站统计的指标(pv uv 在线用户数等),然后存储展示给终端用户。
在项目中遇到的最大问题就是消息的重复处理,在不了解storm的机制之前,一直认为是spout重复取了数据(kafka中),明白了机制后才发现是sotrm的确认机制失败,执行了消息重复机制。通过storm ui发现 fail的次数太多,通过打印bolt性能日志,发现处理时长太大,加了索引,加了线程处理数,加了spout消息处理量,spout超时机制,性能大大提升。

并发:单worker线程多少一直是一个大问题,我们普通的方式都是设置为cpu的核数来判断,如果单独的应用这样设计肯定是不能完全利用到机器的性能,我们的tomcat一般的并发量还能达到100+,因此通过其他软件系统的概念来调整是一种思路,nginx 5w,netty上千,此时要主义storm在具体场景下的应用。

猜你喜欢

转载自blog.csdn.net/soliy/article/details/91357211