问题:
由于数据源产生数据的速度不可预测,所以流处理系统对动态性要求很高、需要适应能力。
本文方法
采用两种机制来扩展运行时的动态适应性: automatic elasticity and stateful migration
1.自动弹性:
在框架层面:实现了扩展决策,即它允许根据扩展策略自动调整每个应用的运算符的并行实例数量,本文提出一个简单的基于阈值的策略(根据传入的工作负载弹性地改变每个运算符的并行实例数量)。
由于框架层面实现了弹性,storm可以与底层的扩展系统耦合,通过根据需要获取和释放计算节点来实现基础设施的弹性。
2.状态迁移:运算符内部状态在不同的节点上迁移,使得storm在运行时改变应用调度,而不影响信息的完整性。
知识:弹性(并行度)
1.数据从一个运算符到下一个运算符,这些都是长期运行的应用程序(拓扑),受到周期性或者不可预测的工作负载变化的影响,可以利用数据并行来处理大量数据。包括增加或者减少运算符的并行实例数量,使得每个实例都能并行处理传入数据的子集。
2.storm没有提供自动扩展能力,只支持静态或者手动定义运算符的并行度。
设计:
引入的新组件,即ElasticityManager(负责缩放策略来改变运算符的并行度,即增减executor数量,在调度器之前执行)、 MigrationNotifier(调度器之后执行,通知调度后改变位置的执行器里面的任务来启动迁移(调度完得改变executor里的任务转移到新的executor中)有状态运算符需要保存状态)和分布式数据存储(DDS)(本地dds用来迁移任务在终止执行前保存内部状态,减少网络迁移开销)
弹性:
|