外部行业实践 ·
Netflix落地开源Flink Autoscaler升级流式作业资源调度能力
流媒体服务商Netflix为解决原有Flink集群级扩缩容方案适配性不足的痛点,正推进旗下30000多个流式作业向开源Apache Flink Autoscaler迁移,目前已覆盖多个AWS部署区域。新方案可实现算子粒度的资源调整决策,匹配复杂有状态流式作业的差异化处理诉求,已有内部业务团队通过该方案实现Flink计算成本的显著下降。后续Netflix会完成剩余内部自动扩缩容实例的迁移,同时探索降
仅供行业学习与场景参考,不代表优秘交付、客户关系或效果承诺。
面临的问题
Netflix此前使用的Flink自动扩缩容系统,基于集群层面的遥测数据生成决策,作业内全部算子都采用同一套扩缩容策略,无法适配带有分支、连接操作以及数TB级状态的复杂有状态处理管道。这类场景下数据流各环节的处理算力需求差异较大,集群级的统一策略无法精准匹配每个算子的实际资源诉求,要么导致资源闲置造成不必要的成本浪费,要么无法满足作业处理的性能要求,同时原有方案在处理异构流式作业扩缩容、有状态应用调整容量时产生的额外成本较高,难以适配Netflix大规模流式作业的日常运营需要。
AI 落地做法
Netflix选择引入开源的Apache Flink Autoscaler替换原有集群级扩缩容方案,这套方案可采集作业运行的各项核心指标,结合吞吐量与繁忙时间测算每个算子的实际处理速率,遍历作业的拓扑图为每个顶点单独计算所需的并行度,实现算子级别的精准扩缩容决策。同时Netflix将这套扩缩容工具和自身的内部控制平面做了深度集成,结合自身大规模作业的运行特征做了多项定制化调整,保障方案能够适配自身的业务场景需求。
实施路径
- 把开源Apache Flink Autoscaler和内部的控制平面做集成,不直接借助Flink Kubernetes Operator完成部署
- 搭建Spring Boot服务,通过Temporal工作流实现不同作业自动扩缩容决策的隔离
- 调整JobManager的指标收集逻辑,可支持最多包含3000个子任务的作业运行
- 新增服务端的指标过滤能力
- 优化扩缩容的判断逻辑,执行扩缩容操作时保留前向连接子图,避免跨FORWARD连接调整并行度时出现数据重分配问题
- 新增针对Sink回压问题的处理逻辑
来源:InfoQ 中文(本站改写摘要,成效数据均取自原文)
项目背景
Netflix从2017年开始部署运行Apache Flink,2019年前后搭建了第一套自动扩缩容系统,这套系统读取Atlas的集群级遥测数据,通过调整TaskManager的总数量,在数千个处理管道上实现了25%到45%的资源使用量下降。随着业务不断发展,复杂有状态流式作业的占比持续提升,原有集群级扩缩容方案的短板逐渐暴露,无法匹配业务发展的需求,因此Netflix启动了向开源Flink Autoscaler迁移的相关工作。 本案例依据「InfoQ 中文」公开发布的信息整理,原文:https://www.infoq.cn/article/8JZ9IdSIxo18dcz6pZG6?utm_source=rss&utm_medium=article
业务问题
Netflix此前使用的Flink自动扩缩容系统,基于集群层面的遥测数据生成决策,作业内全部算子都采用同一套扩缩容策略,无法适配带有分支、连接操作以及数TB级状态的复杂有状态处理管道。这类场景下数据流各环节的处理算力需求差异较大,集群级的统一策略无法精准匹配每个算子的实际资源诉求,要么导致资源闲置造成不必要的成本浪费,要么无法满足作业处理的性能要求,同时原有方案在处理异构流式作业扩缩容、有状态应用调整容量时产生的额外成本较高,难以适配Netflix大规模流式作业的日常运营需要。
实践方案
Netflix选择引入开源的Apache Flink Autoscaler替换原有集群级扩缩容方案,这套方案可采集作业运行的各项核心指标,结合吞吐量与繁忙时间测算每个算子的实际处理速率,遍历作业的拓扑图为每个顶点单独计算所需的并行度,实现算子级别的精准扩缩容决策。同时Netflix将这套扩缩容工具和自身的内部控制平面做了深度集成,结合自身大规模作业的运行特征做了多项定制化调整,保障方案能够适配自身的业务场景需求。
原始来源:https://www.infoq.cn/article/8JZ9IdSIxo18dcz6pZG6?utm_source=rss&utm_medium=article