做流式数据处理有一段时间了,Flink、Spark Streaming或者一些未开源的厂内计算框架都用过,简单写一写流处理相关的思想总结吧。
流处理思想
不管是微批还是纯流,思想不同,不仅框架底层处理方式不同,在代码中处理过程也有很大的不同。比如:Spark Streaming采用微批的思想,实际数据处理时,面向的处理对象是一个数据集,对这个数据集的操作方式就有点像离线的Spark程序;Flink采用纯流的思想,实际数据处理时,面向的数据对象更像是一条一条的数据组成的流,此时的处理像是面向一条独立的数据进行的操作;
流处理中的问题
流处理中遇到最多的问题就是反压了,反压是啥情况造成的呢?简单的说,就是有一步跟不上其他算子计算的脚步,对于产生反压的算子来说,其处理速度远小于上一个算子的产出速度,就这样,一层一层压回去,对于前面算子来说,产出之后并没有被及时消费掉,导致其运行进程中的资源很快被打满,最终原本计算的很快的算子也慢了,一直到数据源头上,显示为并没有多少消费。那么,遇到反压该咋办呢?该优化计算逻辑优化、该给产生反压的算子增大资源增大,最重要的是通过一些web UI或者其他可视化页面、框架进程指标等的监控,定位到产生反压的算子,再进行优化。
流处理框架心得
在使用框架时,度过了一开始的照抄阶段,之后需要对框架的进程模型进行了解,比如,worker进程起了多少个线程去做其中的事情、各个线程分别负责什么内容、其中的资源分配等各种。一般流处理的运行情况,可以根据运行线程中的资源使用情况进行监控,因此多通过监控资源使用情况,来达到监控此流式计算运行情况的目的。
写的有点简单了,后面有了更多心得以后再更新这篇文章。