《Apache Flink 案例集(2022版)》——4.云原生——斗鱼-Apache Flink 在斗鱼的应用与实践(下)

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: 《Apache Flink 案例集(2022版)》——4.云原生——斗鱼-Apache Flink 在斗鱼的应用与实践(下)

《Apache Flink 案例集(2022版)》——4.云原生——斗鱼-Apache Flink 在斗鱼的应用与实践(上) https://developer.aliyun.com/article/1228038



生产实践

搭建平台的过程中,斗鱼也遇到了不少的挑战。  


第一个挑战是 Flink on K8s 集群的部署资源问题。方案上斗鱼使用 Standalone Kubernetes 部署,实际是在 K8s 的集群中,创建了两个实例组。一个实例组用来运行 JM 进程,另一个实例组用来运行 TM 进程。两个实例组之间,通过设置 HA 的集群 id 相同来实现绑定。  


JobManager实例组运行多个Pod时,除其中一个作为Master节点外,其他的Pod都将以StandBy的身份运行;


TaskManager实例组运行多个Pod时,每一个Pod都将注册到JobManager上,作为一个作业执行器存在。


image.png

为了使资源充分隔离,依托于 K8s 的能力,生产部署时斗鱼采取一个作业创建一个 Flink 集群的方式。由于K8s创建一个Pod时,需要指定 CPU 和内存的设置,而 Flink 集群启动的时候需要在Flink配置文件指定JobManager和TaskManager的资源配置,因此在这个方案中遇到的挑战就是如何统一设置 K8s 实例资源与 Flink 集群资源。  


为了解决这个问题,斗鱼改造了 Flink 镜像启动脚本 entrypoint,在脚本中增加了两个操作:  


第一是拉取作业定义,以获取作业的运行配置;


第二是替换 flink-conf 文件 memory size 配置。


image.png


值得注意的是,在Flink社区最新的Native Kubenates方案中这个问题已经通过参数化配置解决了。


image.png


平台遇到的第二个挑战是如何去监控每个作业的运行状态。方案上,斗鱼将每个作业抽象成一条消息,存放在基于 ZK 开发的消息队列中。并且在消息队列虚化了 5 个状态,Accept、Running、Failed、Cancel 以及 Finish。  


每个状态都有一个独立的线程池去监控消费。比如 Running 状态,线程池从消息队列中获取一条作业消息,从中解析 Flink 集群信息,获取 FlinkUI 域名,通过 K8s 的 Nginx Ingress,使用域名去访问 Flink JM Pod,从而获取运行作业的状态。当获取作业状态还是 Running 时,将重入队到队尾,否则将移动到对应状态队列下。


image.png


平台遇到的第三个挑战是如何读取Hive表以及如何使用Hive UDF。斗鱼将一个 FlinkSQL 的提交拆分成三个部分:作业组装、上下文初始化和 SQL 执行。其中作业组装实现了两种方式:  


第一个是 SDK GET,通过 SDK 封装的方法,请求平台的服务层,去获取作业定义;


第二个是 FILE GET,直接读取当前机器,指定路径下的 SQL 文件,生成作业定义。第二个方式主要是方便本地不依赖平台服务,可快速调试引擎。


上下文初始化部分也分为两个过程:  


一个是调优参数的设置,类似常用HiveSQL的Set命令


另一个是 Catalog初始化,Flink集群与Hive的集成就是在这个环节实现的  


以Hive为例,在Catalog注入之前,平台元数据管理模块有一个Catalog初始化的过程,预先将 Catalog 的创建语句存储起来。当一个Flink作业提交时,选择需要注入的Catalog,创建Catalog并注册到Flink的上下文中,从而实现Catalog的元素注入。


image.png


随着任务的增加,对于新手来说,在平台上开发 Flink 作业,从 SQL 编写到上线,往往需要改写数十个版本。缺少快速试错的能力是平台面临的第四个挑战,因此斗鱼设计开发了实时监控、实时调试功能。  


在架构方面,斗鱼引入了 Flink Gateway Server 对 Flink 集群接口二次分装。包含语法校验、SQL 提交、SQL 状态检查、SQL 停止、SQL mock 等功能。将 Flink 集群和网关服务的日志统一收集。通过预启动 Flink 集群,缩短作业启动时间,达到快速调试的能力。  


实时调试主要分为四个步骤,即 SQL 解析、规则校验、执行计划,和物理执行。SQL mock 就是改写了原有的 SQL 解析过程。根据 SQL 解析后得到 Node 数,分析 SQL 的血缘关系,去判断 Source 来源表和 Sink 目的表。动态的将 Source 表改写为 dataGen 的数据源,和 Sink 表改写成 console 的数据源。动态修改 Source 和 Sink 表的配置实现数据源mock的好处是线上开发 SQL 可直接用于调试,不需要修改,并且也不用担心会产生脏数据,可快速验证 SQL 逻辑是否符合预期。


image.png


平台面临的最后一个挑战是Flink作业的监控告警。斗鱼使用自定义Metrics Reporter,将监控指标上报到Kafka集群,继而使用Flink任务去消费Kafka里的Metrics信息,完成如聚合、补充链路维度等操作,处理后的数据再推送到 Push Gateway,写入Prometheus中。最后监控大盘基于Grafana绘制。斗鱼的监控大盘分为资源监控,稳定性监控,Kafka 监控和 CPU 内存监控。



未来规划

Flink 让实时计算更加简单,斗鱼在搭建实时计算平台过程中也并非一帆风顺。对于实时计算平台未来的发展,斗鱼有三个展望: 、


第一个是 Flink 的动态扩缩容,实现平台自动化调整 Flink 作业资源,解决业务数据突增引起的问题;


第二个是简化实时数仓开发模型,降低实时数仓开发门槛,在企业内将实时数仓真正大规模推广使用; 最后一个是完善实时数据质量监控体系,实现实时数据质量可验证与可追溯。

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
2月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
480 32
|
3月前
|
SQL 人工智能 数据挖掘
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
Apache Doris 4.0 原生集成 LLM 函数,将大语言模型能力深度融入 SQL 引擎,实现文本处理智能化与数据分析一体化。通过十大函数,支持智能客服、内容分析、金融风控等场景,提升实时决策效率。采用资源池化管理,保障数据一致性,降低传输开销,毫秒级完成 AI 分析。结合缓存复用、并行执行与权限控制,兼顾性能、成本与安全,推动数据库向 AI 原生演进。
290 0
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
|
3月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
189 8
|
4月前
|
SQL 存储 运维
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
本文介绍了 Apache Doris 在菜鸟的大规模落地的实践经验,菜鸟为什么选择 Doris,以及 Doris 如何在菜鸟从 0 开始,一步步的验证、落地,到如今上万核的规模,服务于各个业务线,Doris 已然成为菜鸟 OLAP 数据分析的最优选型。
296 2
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
|
12月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
310 13
|
12月前
|
运维 Cloud Native 安全
云原生技术在现代企业中的应用与挑战####
本文探讨了云原生技术在现代企业IT架构中的关键作用,分析了其带来的优势和面临的主要挑战。通过实际案例分析,揭示了如何有效应对这些挑战,以实现业务敏捷性和技术创新的平衡。 ####
|
12月前
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
9月前
|
Java 网络安全 Apache
SshClient应用指南:使用org.apache.sshd库在服务器中执行命令。
总结起来,Apache SSHD库是一个强大的工具,甚至可以用于创建你自己的SSH Server。当你需要在服务器中执行命令时,这无疑是非常有用的。希望这个指南能对你有所帮助,并祝你在使用Apache SSHD库中有一个愉快的旅程!
540 29
|
8月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
446 12
|
9月前
|
存储 安全 数据挖掘
天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践
天翼云基于 Apache Doris 成功落地项目已超 20 个,整体集群规模超 50 套,部署节点超 3000 个,存储容量超 15PB
497 2
天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践

相关产品

  • 实时计算 Flink版
  • 推荐镜像

    更多