sparkstreaming 任务出现堆积如何优化?(流量突然大增资源不够怎么办?)
前言
在日常的生产中,什么情况下会出现数据堆积呢?大概有两种情况:
- 由于要修改业务逻辑,streaming 任务暂停,但是这个时候上游 kafka 里面的数据在不断的生产,等你修改完代码,重新启动任务的时候,kafka 里面就会堆积了很多的数据,在一个 interval 时间内处理不完,就造成了堆积。
- 平时正常运行的任务,在业务高峰期,有高于正常情况几倍甚至几十倍的数据打到 kafka 里,这个时候因为资源是固定的,就会出现处理不过来的情况,任务就会堆积,你总不能等到高峰期来的时候把任务停掉,增加资源后再启动吧?或者可以提前把资源给多一点,但是这样会造成资源的浪费,因为平时是用不了那么多资源的,只有在业务高峰的时候才会用到。
数据堆积有什么影响呢?
在出现堆积的时候,本应该 12 点整调度起来的任务,延迟了 5 分,在 12 点 5 分调度起来,后面的任务都会延迟,堆积的 job 就会越来越多,可能会达到几万个,最后出现的情况就是数据处理延迟变大,甚至会出现 application 挂掉的情况。
数据堆积的时候有什么表现呢?
看下面的图,就是发生了任务的堆积(当然,这个是我本地测试的,真实情况会堆积上万的)。