摘要

针对具有多个数据源以及多个输出的流处理应用,使用单个分布式数据流引擎开发时,不论在架构还是可扩展性方面都存在着不足,而基于事件驱动架构的分布式流处理技术是解决该问题的主要方式.但是,事件驱动架构应用于流处理时,往往面临着数据注入速率与数据处理速率不一致的矛盾,当流数据源的数量发生变化、数据值的分布发生波动时,会导致处理延迟加大或资源利用不充分.针对数据注入与数据处理不一致的问题,现有的弹性资源分配策略难以有效处理生产者和消费者之间的依赖关系,且资源分配效果欠佳.论文提出了一种基于强化学习的弹性资源分配方法,解决了具有依赖关系的流处理应用程序之间的数据波动带来的延迟或者资源利用不充分的问题.通过建立状态矩阵和命令矩阵,使得资源管理器能够感知上下游应用的状态变化,从而及时调整流处理应用的资源需求,保证了流处理应用执行过程的延迟要求,提高了系统的资源利用率.经过测试,基于强化学习的弹性资源分配与Spark动态资源分配方法相比,延迟能减少15%,资源利用率能提高20%以上,其吞吐量能够提高10%左右.