作者:张剑
用户背景
米哈游成立于 2011 年,致力于为用户提供美好的、超出预期的产品与内容。公司陆续推出了多款高品质人气产品,包括《崩坏学园2》、《崩坏3》、《未定事件簿》、《原神》,动态桌面软件《人工桌面》以及社区产品《米游社》,并围绕原创 IP 打造了动画、漫画、音乐、小说及周边等多元产品。总部位于中国上海,并在新加坡、美国、加拿大、日本、韩国等国家和地区进行全球化布局。
业务需求
Flink 在米哈游大数据发展过程中,一直扮演着重要角色。自实时计算平台建立以来,Flink 作为实时计算引擎,经历了多个发展阶段,实时计算平台也在不断地迭代完善。在米哈游内部,实时计算平台被称作 Mlink,主要以 Flink 为主,兼容 Spark Streaming 任务。从起初的 Flink Jar 包任务为主,发展到以 Flink Sql 为主,不断的降低了使用门槛和提高了任务的开发效率;从起初基础的 Flink 任务开发,发展到跨区域、跨云厂商的任务多版本管理,满足了业务发展的需求。在发展的过程中,米哈游不断地关注着社区的发展,并同社区和阿里云同学保持密切的联系。
米哈游在 Flink 探索和实践的过程中,主要存在如下痛点:
Jar 任务的开发成本高,对于不熟悉 Flink 代码的同学来说使用成本过高。同时,Jar 任务维护成本高,一些代码逻辑的改动会涉及到重新打包、上传,上线等动作;
任务管理功能缺失,其中多租户、历史版本回溯、开发版本和线上版本管理、UDF 管理、血缘管理是实时平台管理的重要内容;
Flink 引擎本身管理,主要涉及到多 Flink 版本管理,任务参数配置、常用 Connector 的二次开发、多资源环境管理等问题;
任务的告警监控管理,任务问题诊断;
离线数仓互通,包括 Hive Catalog 管理,实时和离线调度依赖管理等。
此外,米哈游还存在跨区域、跨云厂商中遇到的问题需要解决。主要是跨区域之后,任务上线和提交效率,跨云厂商,资源环境不一致等。
平台建设
目前米哈游的实时平台架构如下
前端控制云环境的切换。Backend Service 主要负责用户权限管理、任务的多版本管理、血缘管理,任务运维,任务上下线,任务监控和告警等工作。Executor Service 主要负责任务解析、任务提交运行、任务下线和同各类资源管理器交互等工作。其中,Backend Service 到 Executor Service 通过 Thrift 协议通信,Executor Service 的实现可以多语言扩展。架构设计主要解决跨地区跨云厂商问题,实现任务管理和任务运行之间解耦。
Mlink 实时计算平台主要设计了概览、开发、资源管理、运维、数据探查、同步任务、用户管理和执行器管理等模块。其中开发页面主要是用户编写任务和参数配置,包含历史版本管理等内容。资源管理主要是 Jar 包任务和 UDF 管理。运维主要是任务启停、任务运行监控、任务告警配置等。数据探查部分主要是预览部分数据功能,比如 Kafka Topic 支持按分区、按时间或者 Offset 预览数据。同步任务主要是为了方便管理同步任务,比如 CDC 到 Iceberg 一键同步和运行管理。执行器负责 Executor 的运维工作,包括 Executor 上下线,健康状态监控等。
《Apache Flink 案例集(2022版)》——4.云原生——米哈游-Flink 在米哈游的落地实践(下):https://developer.aliyun.com/article/1228020