《Apache Flink 案例集(2022版)》——4.云原生——京东-Flink on K8s 在京东的持续优化实践(下)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 《Apache Flink 案例集(2022版)》——4.云原生——京东-Flink on K8s 在京东的持续优化实践(下)

《Apache Flink 案例集(2022版)》——4.云原生——京东-Flink on K8s 在京东的持续优化实践(上) https://developer.aliyun.com/article/1228060



接下来是磁盘的性能问题。容器中的存储空间由两部分组成,如上图所示,底层是只读的镜像层,顶部是可读写的容器层。容器运行的时候涉及到文件的写操作都是在容器层中完成的,这里需要一个存储驱动提供联合文件系统来管理。  


存储驱动一般来说为空间效率进行了优化,额外的抽象会带来一定的性能损耗 (取决于具体存储驱动),写入速度要低于本地文件系统,特别是使用了写时复制的存储驱动来说,损耗更大。这对于写密集型的应用来说,会有更大的性能影响。而在 Flink 中,很多地方都涉及到本地磁盘的读写,比如日志输出、RocksDB 读写、批任务 shuffle 等。那么该如何处理来减小影响?  


一是可以考虑使用外挂的 Volume,使用本地存储卷,直接写数据到 主机文件系统来提升性能;


此外也可以调优磁盘 IO 相关参数,比如调优 RocksDB 参数,提升磁盘的访问性能;


最后也可以考虑采用一些存储计算分离的方案,比如使用 Remote Shuffle,提升本地Shuffle的性能和稳定性。


image.png

在实践过程中经常会发现,很多业务的计算任务配置不合理,占用了过多的资源造成了资源浪费。此外,流量存在波峰波谷,如何在洪峰时自动扩容,在波谷时自动缩容,在减少人工干预、保证业务稳定的同时提高资源利用率,这都涉及到资源弹性伸缩的问题。为此京东开发了弹性伸缩的服务,根据作业运行情况动态调整任务的并行度以及 Taskmanager 的规格,来解决作业吞吐不足、资源浪费等问题。  


通过弹性伸缩服务,可以较好地解决一些场景的资源浪费问题,以及任务吞吐与算子并行度呈线性关系条件下的性能问题。不过它还是存在一定的局限性,比如对于外部的系统瓶颈、数据倾斜以及任务本身的性能瓶颈还有无法通过扩并行度提升的场景,不能很好地应对解决。  


此外结合弹性伸缩,京东进行了一些实时流任务和离线批任务错峰混部的尝试。如上图右所示,在凌晨前后,流任务比较空闲,会缩容释放出一些资源给批任务;之后可以使用这些释放的资源在夜间运行批任务;到了白天批任务运行完释放的资源又可以还给流任务,用于扩容以应对流量洪峰,从而提高资源的整体利用率。


image.png

相比物理机或 YARN 环境,Flink on K8s 出现问题以后的排查相对要更困难,因为这里面还涉及到 K8s 许多组件,比如容器网络、DNS 解析、K8s 调度等各方面的问题,都存在一定的门槛。  


为了解决这个问题,京东开发了智能诊断的服务,将作业相关的各个维度的监控指标 (包括物理机的、容器的、集群的和任务的指标) 与任务拓扑结合起来并与 K8s 打通,结合Pod日志和任务日志联合进行分析,并将日常人工运维的一些方法进行归纳总结应用到分析策略中,诊断出作业的问题并给出优化建议。目前支持对任务重启、任务背压、Checkpoint失败、集群资源利用率低等一些常见问题进行诊断。


用户收益

全部 on K8s 后收益还是比较明显的:  


首先混合部署服务和资源共享能力获得了提升,节省机器资源 30%;


其次,具有更好的资源隔离和弹性自愈能力,比较容易实现根据业务的负载进行资源的弹性伸缩,保证了业务的稳定性;


最后开发、测试、生产一致性的环境,避免环境给整个开发过程带来问题,同时极大提升了部署和运营自动化的能力,降低了管理运维的成本。


未来规划

未来京东会在以下几方面继续探索:  


1. 调度优化:


一方面是 K8s 层面资源调度优化,更高效地管理大数据的在线服务和离线作业,提升 K8s 集群的利用率和运行效率;


另一方面是 Flink 作业调度优化,支持更丰富、更细粒度的调度策略,提升 Flink 作业资源的利用率和稳定性,满足不同的业务场景需要。  


2. 服务混部:将不同负载的服务混部在一起,在保证服务稳定的前提下尽量提升资源利用率,使服务器的价值最大化;  

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
29天前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
|
2月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
116 2
|
21天前
|
消息中间件 资源调度 API
Apache Flink 流批融合技术介绍
本文源自阿里云高级研发工程师周云峰在Apache Asia Community OverCode 2024的分享,内容涵盖从“流批一体”到“流批融合”的演进、技术解决方案及社区进展。流批一体已在API、算子和引擎层面实现统一,但用户仍需手动配置作业模式。流批融合旨在通过动态调整优化策略,自动适应不同场景需求。文章详细介绍了如何通过量化指标(如isProcessingBacklog和isInsertOnly)实现这一目标,并展示了针对不同场景的具体优化措施。此外,还概述了社区当前进展及未来规划,包括将优化方案推向Flink社区、动态调整算子流程结构等。
294 31
Apache Flink 流批融合技术介绍
|
1月前
|
Kubernetes 监控 Cloud Native
Cluster Optimizer:一款云原生集群优化平台
**Cluster Optimizer** 是一款云原生集群优化平台,旨在通过自动化和智能化工具帮助企业降低云成本,解决云原生架构中的成本管理难题。面对资源闲置、配置不当和缺乏自动化优化机制等挑战,Cluster Optimizer能够深入分析云资源、应用和用户行为,精准识别优化机会,并给出具体建议,涵盖节点组、节点、GPU 节点、磁盘、持久卷和应用等多个维度。通过优化实例类型、自动扩缩容和资源分配,帮助企业降低成本、提升性能和效率。[点击此处](https://www.wiseinf.com.cn/docs/setup/) 免费安装和试用 **Cluster Optimizer 社区版**。
81 9
|
2月前
|
Java 微服务 Spring
驾驭复杂性:Spring Cloud在微服务构建中的决胜法则
【8月更文挑战第31天】Spring Cloud是在Spring Framework基础上打造的微服务解决方案,提供服务发现、配置管理、消息路由等功能,适用于构建复杂的微服务架构。本文介绍如何利用Spring Cloud搭建微服务,包括Eureka服务发现、Config Server配置管理和Zuul API网关等组件的配置与使用。通过Spring Cloud,可实现快速开发、自动化配置,并提升系统的伸缩性和容错性,尽管仍需面对分布式事务等挑战,但其强大的社区支持有助于解决问题。
51 0
|
2月前
|
Kubernetes Cloud Native 应用服务中间件
Kubernetes 自动伸缩策略:优化资源利用率
【8月更文第29天】在现代云原生环境中,应用的流量往往具有不可预测性。为了应对这种变化,Kubernetes 提供了多种自动伸缩机制来动态调整应用实例的数量和每个实例分配的资源。本文将深入探讨两种主要的自动伸缩工具:水平 Pod 自动伸缩器 (HPA) 和垂直 Pod 伸缩器 (VPA),并提供实际的应用示例。
64 0
|
2月前
|
消息中间件 Java 数据处理
揭秘Apache Flink的Exactly-Once神技:如何在数据流海中确保每条信息精准无误,不丢不重?
【8月更文挑战第26天】Apache Flink 是一款先进的流处理框架,其核心特性 Exactly-Once 语义保证了数据处理的精准无误。尤其在金融及电商等高要求场景下,该特性极为关键。本文深入解析 Flink 如何实现 Exactly-Once 语义:通过状态管理确保中间结果可靠存储;利用一致的检查点机制定期保存状态快照;以及通过精确的状态恢复避免数据重复处理或丢失。最后,提供一个 Java 示例,展示如何计算用户访问次数,并确保 Exactly-Once 语义的应用。
56 0
|
13天前
|
Cloud Native 云计算 Docker
云原生之旅:从容器化到微服务架构
【9月更文挑战第27天】本文将引领读者进入云原生的世界,探索如何通过容器化技术实现应用的快速部署与扩展,并深入理解微服务架构的设计哲学。我们将一起见证代码如何转化为可在云端无缝运行的服务,同时讨论云原生生态中的最佳实践和面临的挑战。
|
2天前
|
Cloud Native 物联网 持续交付
云原生架构:构建现代应用的基石
随着数字化转型的深入,企业对软件开发的速度和灵活性提出了更高的要求。云原生架构作为一种新兴的技术范式,以其独特的优势,正在成为现代应用开发的主流选择。本文将探讨云原生架构的核心概念、关键技术以及实践应用,帮助读者理解如何利用云原生技术构建高效、可扩展的现代应用。
|
2天前
|
Kubernetes Cloud Native 云计算
云原生时代的技术演进:Kubernetes与微服务架构的完美融合
随着云计算技术的飞速发展,云原生概念逐渐深入人心。本文将深入探讨云原生技术的核心——Kubernetes,以及它如何与微服务架构相结合,共同推动现代软件架构的创新与发展。文章不仅剖析了Kubernetes的基本工作原理,还通过实际案例展示了其在微服务部署和管理中的应用,为读者提供了一条清晰的云原生技术应用路径。
10 2

相关产品

  • 实时计算 Flink版