原创智能优化,原创度检查,一键采集,文章组合(迫切需要一个统一集群资源管理和调度系统的升级改造(图))
优采云 发布时间: 2021-10-15 00:28原创智能优化,原创度检查,一键采集,文章组合(迫切需要一个统一集群资源管理和调度系统的升级改造(图))
2017年京东内部的大部分任务仍然是storm任务,运行在物理机上,少部分Spark Streaming运行在Yarn上。不同的运行环境导致部署和运维成本极高,并且存在一定的资源利用率浪费,因此我们迫切需要一个统一的集群资源管理和调度系统来解决这个问题。
经过一系列的试验、比较和优化,我们选择了 K8s。它不仅可以解决一些部署、运维、资源利用等方面的问题,还具有云原生弹性自愈、天然容器完全隔离、更容易扩展和迁移等优点。所以在2018年初,我们开始升级容器化。
在 2018 年的 6.18 中,我们只有 20% 的任务在 K8s 上运行;到2019年2月,所有实现实时计算的任务都跑在了K8s上。经过容器化,实时计算平台经历了6.18,双11的几次大促,顶住了峰值压力,运行非常稳定。
但是我们过去的Flink容器化方案是基于静态资源预分配的方式,无法满足很多业务场景。所以2020年我们也升级了一个容器化方案,后面会详细介绍。
容器化带来了很多好处,主要有以下三点:
我们过去的容器化方案是基于 K8s 部署部署的 Standalone Session 集群。需要用户在平台上创建集群时提前预估集群需要的资源,比如需要的资源规格和jobmanager和taskmanager的数量,然后平台通过K8s客户端向K8s master发送请求创建作业管理器部署的部署和任务管理器。
其中,整个集群的高可用是基于ZK实现的;状态存储主要存在于HDFS中,一小部分存在于OSS中;监控指标(容器指标、JVM指标、任务指标)上报给Prometheus,结合Grafana实现指标直观展示;logs 基于我们京东内部的Logbook系统,用于采集,存储和查询。
在实践中发现该方案有两个不足:
于是我们对容器化方案进行了升级,实现了基于K8s的动态资源分配方式。创建集群的时候,首先我们会根据用户指定的job manager的数量来创建jobmanager的部署;当用户提交任务时,我们会动态向平台申请资源,并根据任务所需的资源数量创建任务管理器。
在运行过程中,如果发现任务需要扩展,Job manager会与平台交互进行动态扩展;当资源被浪费时,它会缩小。这样可以很好的解决静态预分配带来的问题,提高资源利用率。
这里,平台与K8s交互创建和销毁资源主要基于4个方面的考虑:
另外,为了兼容原有的Slot分配策略(按槽分配),在提交任务时,会一次估计并申请任务所需的资源,同时按照一定的策略等待。当有足够的资源满足任务运行的需要时,进行槽位分配。这在很大程度上与原创时隙分散分配策略兼容。
三、Flink 优化和改进
下面介绍 Flink 的优化和改进。
1、预览拓扑
在业务使用平台的过程中,我们发现了几个业务痛点:
为了解决这些问题,我们开发了拓扑预览功能:
下面简单介绍一下拓扑预览的工作流程。用户在平台上提交 SQL 作业或 Jar 作业。作业提交后,会生成一个操作员配置信息并反馈给我们的平台。我们的平台会预览整个拓扑图,然后用户可以在线调整运营商配置信息。调整后,将调整后的配置信息重新提交到我们的平台。而且这个过程是可以不断调整的,调整好之后用户就可以提交任务了。提交任务后,整个在线调整参数才会生效。
这里的任务可以多次提交。如何保证生成算子前后两次提交的稳定对应?我们采用这样的策略:如果指定uidHash或uid,我们可以使用uidHash和uid作为这种对应关系的key。如果没有,我们将遍历整个拓扑图,按照广度先行的顺序,根据算子在拓扑图中的位置,生成某个唯一的ID。得到唯一ID后,就可以得到一个确定的关系。
2、背压量化
下面介绍我们的第二个改进,背压量化。目前有两种方法可以观察背压:
针对这个问题,我们的解决方案是采集反压发生的位置、时间、频率指标,然后上报。将定量背压监控指标与运行时拓扑相结合,可以直观地看到背压的影响(影响任务位置、持续时间和次数)。
3、文件系统支持多种配置
下面介绍文件系统对多种配置的支持。
目前在 Flink 中使用文件系统时,通过 FileSystem.get 传入 URI。FileSystem 将使用 shceme+authority 作为查找缓存文件系统的键。如果不存在,根据scheme找到FileSystemFactory,调用create创建文件系统。返回后就可以对文件进行操作了。但是在平台实践的过程中,我们经常会遇到这样的问题:
这两个问题都涉及到如何让 Flink 的同一个文件系统支持多组配置。我们的解决方案是通过使用不同的方案来指定和隔离不同的配置。以支持多种配置的HDFS为例,如下图所示:
我们还做了很多其他的优化和扩展,主要分为三个部分。
四、未来规划
最后,还有未来的规划。总结为4点:
原文链接: