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

简介: 《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日以线上峰会的形式与大家见面。
相关文章
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
国诚投顾携手阿里云,依托Serverless架构实现技术全面升级,构建高弹性、智能化技术底座,提升业务稳定性与运行效率。通过云原生API网关、微服务治理与智能监控,实现流量精细化管理与系统可观测性增强,打造安全、敏捷的智能投顾平台,助力行业数字化变革。
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
Kubernetes Cloud Native 安全
云原生机密计算新范式 PeerPods 技术方案在阿里云上的落地和实践
PeerPods 技术价值已在阿里云实际场景中深度落地。
|
运维 监控 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生 Serverless 实践
通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
|
12月前
|
人工智能 Cloud Native 算法
拔俗云原生 AI 临床大数据平台:赋能医学科研的开发者实践
AI临床大数据科研平台依托阿里云、腾讯云,打通医疗数据孤岛,提供从数据治理到模型落地的全链路支持。通过联邦学习、弹性算力与安全合规技术,实现跨机构协作与高效训练,助力开发者提升科研效率,推动医学AI创新落地。(238字)
715 7
|
弹性计算 运维 Cloud Native
【云故事探索】NO.17:国诚投顾的云原生Serverless实践
简介: 通过与阿里云深度合作,国诚投顾完成了从传统 ECS 架构向云原生 Serverless 架构的全面转型。新的技术架构不仅解决了原有系统在稳定性、弹性、运维效率等方面的痛点,还在成本控制、API 治理、可观测性、DevOps 自动化等方面实现了全方位升级。
291 1
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
607 8
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
1612 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
运维 Kubernetes Cloud Native
分钟级到秒级:Yahaha 基于 OpenKruiseGame 的 UE5 游戏云原生实践
回顾《STRIDEN》项目在短短两个月内完成云原生转型的历程,它验证了一条清晰、可行的路径,即如何利用云原生技术,从根本上解决现代在线游戏所面临的运维复杂性难题。

相关产品

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

    更多