Flink 在米哈游的应用实践

news2024/11/24 14:37:21

摘要:本文整理自米哈游大数据实时计算团队负责人张剑,在 Flink Forward Asia 2022 主会场的分享,本篇内容主要分为三个部分:

  1. 发展历程和平台建设

  2. 场景应用实践

  3. 未来展望

Tips:点击「阅读原文」获取演讲 ppt

01

发展历程和平台建设

米哈游成立于 2011 年,致力于为用户提供高品质、超出预期的产品和服务。公司陆续推出多款人气产品,如崩坏学园 2、崩坏 3、未定事件簿、原神以及社区产品米游社等。

9748e5d8921980945371e6fdda798ffd.jpeg

随着公司的快速发展,实时计算需求应运而生。我们基于 Flink 计算引擎构建了实时计算平台。依据需求及主要工作的不同划分为三个阶段。

第一阶段,以 Datastream API 开发为主的 Flink 平台。第二阶段,以 Flink SQL 为主的一站式开发平台。第三阶段,一站式开发平台的功能深化和场景覆盖。

7170d7cee9561313cb684cb2c397b23a.jpeg

为什么选择 Flink?首先是基于 Flink 框架优异的特性,如毫秒延迟、窗口计算、状态管理、容错恢复。同时蓬勃发展的社区,对 Flink 的引入充满信心。

dd3b404a21a592e7f5b17367f564c102.jpeg

1.0 阶段主要是以 Datastream API 开发为主,初步具备了任务管理以及运维能力。但随着开发人员增多,基于 Datastream API 开发弊端稍加显现,如开发难度大,版本易冲突、运维难度大等。

2.0 阶段为了解决大家的问题,构建了以 Flink SQL 为主的一站式开发平台,主要基于 Flink 1.10 和 1.12。平台的主要工作主要分为如下四个方面:

  1. 加强多云跨区域任务管理能力的建设。

  2. 增强 Flink SQL 能力以及丰富上下游连接器。

  3. 构建指标和日志体系。

  4. 完善元数据以及任务血缘的管理。

基于一站式开发平台较大的提高了大家的开发效率。截止目前,Flink SQL 占比总任务数达 90%以上。

f834f7fcb9abd2ec079e9f0fdbd6fddf.jpeg

随着业务的发展,大家提出了新的期望。总结起来有如下几点:

  1. 越来越多的同学加入,对任务的调优和调参方面希望能够降低成本。

  2. 部分业务的流量波动性较大,希望能有任务的自动扩缩容管理机制。

  3. 部分常见的 ETL 任务,用 Flink SQL 开发也有较大的成本,希望能够基于配置生成 Flink 任务。

  4. 对数据的时效性有了新的期望,希望数据入仓能够分钟可查,或者基于近实时数仓开发。

基于此,3.0 阶段主要是一站式平台开发功能深化和场景覆盖。我们思考的方向主要有如下四个方面:

  1. 静态和动态资源调优。

  2. 自动扩缩容。

  3. 资源弹性能力。

  4. 加强近实时数仓的建设。

静态资源调优指用户开发完一个任务,依据其基本的业务逻辑及探测当前时刻的任务流量,结合本身任务的设置来给定初始资源,同时优化一些不合理的选项,避免用户反复调试。动态调优指一个任务已经上线运行。根据作业收集的指标信息,不断调整任务的资源,来满足任务的正常运行,避免反压及流量波动所带来的影响。从中可以看出,动态调优需要平台具备自动扩缩容的管理机制。而自动扩缩容的管理机制又对底层资源的弹性具有一定的要求。

c415377592a550b8489d6eeeb16aff0d.jpeg

平台的整体架构,主要分三个部分:

  1. 用户权限及鉴权。

  2. 功能和服务。主要包含:概览大盘、作业开发、版本管理、作业运维、作业日志、元数据及血缘、监控告警、资源调优、自动扩缩容、弹性资源管理、安全管控。

  3. 资源和环境。主要包含:多元环境执行端、资源管理器、跨云跨区域的环境管理。

eedcab2670cf29a9e696b98aaef6c7f8.jpeg

02

场景应用实践

第一个重要的应用场景是全球游戏日志标准化采集加工。众所周知,日志处理是大数据处理的重要方面,有些日志的重要性不亚于数据库里的数据。Flink 承担着公司全球游戏业务每天近百亿的日志处理,峰值流量过千万。依据采集方式的不同将数据来源分为两大类。

  1. 通过 Filebeat 的采集。

  2. 通过日志上报服务接收之后传输到 Kafka 实时数据总线。

经过 Flink SQL 处理、加工、写入下游的存储,比如 Clickhouse、Doris、Iceberg。同时,我们会对采集、加工、处理等环节的数据延迟和数据质量加以监控和校正。提供给下游的业务,比如客服查询系统、运营实时分析、离线数仓等。

7f82759ca393ff5527fb11edb27f5067.jpeg

第二个应用场景是实时报表和实时大屏。放到一起是因为它们通常会涉及到聚合指标的计算。我们针对重要的指标,根据业务需求提供实时大屏服务,同时针对运营基于 BI 报表提供实时指标的应用查看,让运营能够及时了解当前游戏的运行状况,方便给业务侧做分析判断。

43bc08fb20b9032f6c50fec564bffc04.jpeg

基于实时指标的应用的案例:社区帖子排序。主要用到的是实时指标。社区帖子排序通常会涉及到数据关联,这也是 Flink 比较强项的能力。

社区帖子排序的数据主要源于两个方面。第一个是通过客户端埋点上报,通过 Kafka 接收,Flink 通过流式消费 Kafka 来实现数据的接入。第二个是在业务库,比如 MySQL 的分库分表,我们通过 Flink CDC 能够很方便的获取 Binlog 的实时数据,然后将分库分表的数据写入下游 KV 存储,通过另外一个任务进行流表关联,实现数据打宽的目的。

167af7f11b0a0faee0fcf2dc13d4a071.jpeg

但为什么和上图内容不一样呢?这是因为这一常见链路有两个弊端。第一个是引入了 KV 存储,如 Hbase,任务链路的复杂度就会提高。第二个是这里假定流的速度慢于维表更新的速度,否则就会导致数据关联不上。

为了解决这些问题,我们在 Flink SQL 中将流表关联任务和 Flink CDC 任务在同一个任务里进行接入,采用的是 Regular Join 的方式。这里可能就会有同学会有疑问,用 Flink SQL 需要设置一个统一的状态过期时间,那么维表状态数据会被清理掉,这样不就没办法进行关联了吗?

这里我们拓展了 Flink SQL 的能力,能够在 SQL 层面控制底层状态细化的生存周期。比如可以将维表的状态设置为不过期,从而实现数据关联,之后再经过指标计算,提供给后端帖子排序服务做前端展示。

第三个应用场景是近实时数仓。主要有两个方面:

第一个方面是离线入仓近实时化改造。以前数据离线入仓往往是通过小时级 ETL 任务进行的,每个小时数据入仓后,下游的调度任务才能够依次启动。对于较大的日志数据,更是可能会耗费 10-20 分钟不等,占据每个小时的 20%~30% 的时间。

经过日志入仓近实时化的改造,通过实时任务来写入 Iceberg 表,同时对采集、加工、写入的延迟加以监控,通过日志文件的元信息和实时计算的元信息进行比对来保证数据质量。最后,针对 Iceberg 表建立 Iceberg Manager 管理中心,主要是小文件合并优化、快照清理等。

从离线日志近实时数仓改造能得到两个明显的收益。一是离线存储的 IO 从之前的每个小时波动性较大到现在较为平稳,二是数据入仓的时效从以前的每小时到分钟级。

第二个方面是数据库数据一键入湖。相较日志,数据库的数据 Schema 相对具有结构化,我们可以自动探测 Schema 一键生成入湖的任务。依托平台的自动调优以及扩缩容的能力,自动提交任务运行。

ec66bd41492b3b887ba4571d54a1a30f.jpeg

针对数据库的数据同步,主要会分为两条链路。第一个是通过 Flink CDC 进行全量同步写入 Iceberg V2 表,同步时关闭 upsert 功能,保证写入不会产生太多 delete file。第二个是采用 Flink CDC 做增量同步,通过 Flink SQL 再写入同一个 Iceberg V2 表。过程中我们发现,有时候很多任务可能会对同一个数据源进行消费,这一过程会对上游业务库有一定的压力。所以我们做了一定的优化,将 Flink CDC 采集的数据先写入 Kafka。后面如果再有新的任务对同一个数据源消费,会被自动感知,切换到已经同步过数据的 Kafka 上,避免对业务库产生压力。

数据库数据一键入湖的收益:一方面是从原来需要经过 Flink SQL 到现在基于配置式任务开发,在开发效率上有较大的提高,另一方面从以前离线的批量拉取,过渡到现在对 Binlog 的实时消费,避免了数据库的压力。

下面分享一个近实时数仓的应用案例。如下图所示,这是我们提供的玩家战绩查询,主要是通过 Flink SQL 任务将实时数据写入 Iceberg 表,然后通过实时任务进行排序、计算等操作,写入中间 Iceberg 表,最后通过同步任务将数据同步给战绩服务,给玩家提供查询。

879c16b4a327e571107f577df4886c29.jpeg

第四个应用场景是实时风控。在米哈游,风控团队和实时计算团队联系密切,我们一起拓展了在风控领域的作用。良好的风控服务无疑也是彰显 Flink 在风控领域较为强大的作用,我们基于风控引擎构建了一套相对自动化的任务管理方式,让实时计算平台服务化。

首先根据指标规则,自动拆解任务,自动化做任务创建以及任务调优运行。依靠底层的弹性能力能够比较方便的保证任务的正常运行。同时,我们会对计算完成的指标数据以及原始数据实时入湖。经过每个小时做全量指标校验以及线上规则全面监控来保证实时数据的准确性。拓展的应用场景比如登陆校验、游戏反作弊、人机校验等。

587e7a6b5c7cbf30bb3bbd7083633ddb.jpeg

03

未来展望

第一、Flink 奠定了实时计算领域的基础,我们将着重加强平台能力的建设,主要有如下四个方面:

  1. 加强 Flink SQL 及本身能力的建设,包括流处理、批处理的能力。

  2. 增强资源调优,包括静态资源调优,动态资源调优。目的是让业务开发人员更多的关注业务本身,而无需关心其他技术性问题。

  3. 做好自动化运维的工作,降低用户的运维成本。

  4. 拓展弹性能力。我们现在是基于 Yarn On K8s 的模式,未来我们将推进 Flink Native K8s,借助 K8s 本身优秀的资源管理能力,来实现弹性和更好的应用体验。

6e02f717be4df89b0200f05e6c70c22a.jpeg

第二、探索更多的使用场景,有如下三个方面:

  1. 基于 Flink SQL 实现延迟消息的服务结合 Kafka,就能相对简单的提供给消息队列团队,帮助其更好的发展。

  2. 基于 Flink CDC 的 Binlog 服务提供给运维团队,助力业务发展。

  3. 加强应用级别指标能力建设,帮助业务开发团队更好的发展业务。

5a0cf7ff09c3d0758fcf857c0447a275.jpeg

最后,数据湖和 Table Store 的不断实践,主要有如下方面:

首先,数据湖正处于高速发展,Table Store 也崭露头角。随着新版本的发布,让我们基于流批一体的生产实践有了基础,我们也在不断探索流批一体的生产实践。

5fc0d90efd889ee28d1ed39e4fec6b3d.jpeg

其次,在进一步探索近实时数仓的建设。过去离线数仓、实时数仓相对割裂,在建设近实时数仓时,如何基于数据的确定性和数据的无界性,在近实时数仓中得以平衡。比如,我们是否可以基于近数据源产生类似 WaterMark 的一种机制来在流数据上保证一定的确定性,或者是文件的 FileMark 来实现等同于离线批处理的确定性含义呢?另外,离线数仓往往有完善的任务调度和依赖,方便用户进行补数、重跑等操作。那么在建设近实时数仓管理中心的时候,我们是否也需要相应的功能呢?这些都是值得我们探索和思考的地方。


Flink Forward Asia 2022

本届 Flink Forward Asia 更多精彩内容,可点击「阅读原文」或扫描图片二维码观看全部议题的视频回放及获取 FFA 2022 峰会资料!

17020abf50452f2231ccb57fd841ac6c.png

▼ 关注「Apache Flink」,获取更多技术干货 ▼

43a8d99a4166cdf1d6f40105c0b7c410.png

 45282d90ab24cfc13779e0a6ce5bc1a2.gif  点击「阅读原文」,获取演讲 PPT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享一种通信协议的应用编程原理和思路

已剪辑自: https://mp.weixin.qq.com/s/wy-flva6pCNqHV3ObeLPCQ 嵌入式开发过程中,UART、 CAN、 USB等通信基本离不开通信协议。 下面给大家分享一种通信协议(MAVLink)在应用编程中的编程原理和思路。 本节提供“MAVLink发送接收例程”例程下…

[FTP] ftp通信协议抓包分析

想在ESP32上用TCP来实现ftp服务器,抓一下ftp通信包分析一下。总的来说就是两个TCP通道,一个命令通道,一个数据通道;数据通道只有在遍历目录、下载、上传的时候才开启,其余时候均不开启;主要就是协议对接好就…

【认识】wireshark使用教程

本文章,是简单粗暴学习Wireshark的抓包功能后,记录的一些笔记。 1 Wireshark简介及抓包原理及过程 1.1 简介 Wireshark是1个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用…

从盒马生鲜迫切转型升级有感而发,疫情之后,路在何方

据悉,针对浦东地区目前突增的需求,市民线上采买生活物资的订单激增,饿了么联合包括每日优鲜、大润发在内的主要生鲜买菜商户,一起增加运力配合;盒马生鲜也对接了上海之外的山东、云南等省外基地,以避免中间…

JVM核心知识详解

文章目录1. JVM内存分配程序计数器虚拟机栈栈帧都有哪些内容栈内存溢出线程运行诊断演示1(cpu占用过多)演示2(死锁)本地方法栈堆堆内存诊断jmp诊断堆内存jconsole诊断堆内存jvisualvm诊断堆内存方法区直接内存java操作磁盘文件NIO…

IT行业分析报告:2022年哪个编程语言最受雇主公司喜欢?

2022年哪个编程语言最受雇主公司喜欢? 被认为是朝阳行业的IT互联网,软件工程师的平均年薪只涨了0.8%,再加上这两年互联网“寒冬”的说法,很多人不禁会问,现在还能入行IT互联网吗? 今天给大家整理了一份IT行…

Vue全局共享数据之globalData,vuex,本地存储使用方法

目录 一、globalData 二、vuex存储方式 1.vue2用法,2.vue3用法 三、本地存储 uniapp的数据缓存 写在最前面,把vue能用到的存储方法都整理拿出来,方便阅读以及工作用。🍉🍉🍉可以收藏起来即拿即用 Vue全局共…

杨旸:从边缘智能迈向泛在智能

内容来源:2022年11月12日,在全球边缘计算大会上海站上,我们非常荣幸邀请到了特斯联集团首席科学家杨旸博士来分享,杨旸博士曾任上海科技大学教授、科道书院院长、上海雾计算实验室主任;科技部“第五代移动通信系统&…

win10VS2017安装boost库

安装boost库参考:Windows下VS2017下boost库安装配置 https://blog.51cto.com/u_15179769/5633439 下载boost库 官方网站:https://www.boost.org/ 下载链接:https://www.boost.org/users/history/version_1_67_0.html 搜索vs开发人员命令…

JavaWeb框架(一):Web入门,Http的请求和响应,https介绍,Web实战自定义服务器

Servlet入门 MVC实战项目 仓储管理系统JavaWeb入门介绍Http协议Http请求数据格式Http响应数据格式Web实战Demo:自定义服务器对比Https协议总结Redis章节复习已经过去,新的章节JavaWeb开始了,这个章节中将会回顾JavaWeb实战项目 仓储管理 代码…

LC-417. 太平洋大西洋水流问题(多源BFS、DFS)

417. 太平洋大西洋水流问题 难度中等558 有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数…

[附源码]计算机毕业设计Python的文成考研培训管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

详细复习云开发~小程序【云存储、列表的下拉刷新、列表的分页加载】

文章目录一,云开发~云存储1-1,云开发控制台管理文件1-2,上传图片到云存储1-3,给商品列表加商品图片1-4,上传视频到云存储1-5,上传word,excel文件到云存储1-5-1,上传之前先选择文件1-…

我国数据库现状与未来发展趋势

作者:IT圈黎俊杰 一、数据库现状 (一)国际数据库市场现状 在看国内数据库市场现状前,先看一组国际市场数据库的应用情况。 以2021年4月份数据国际市场数据库热度排名为例,稳居前三的Oracle、MySQL 和 Microsoft SQL …

朗坤环境递交注册:拟募资11亿 陈建湘家族色彩浓厚

雷递网 雷建平 12月19日深圳市朗坤环境集团股份有限公司(简称:“朗坤环境”)日前更新招股书,并提交注册,准备在深交所创业板上市。朗坤环境计划募资11.22亿元,其中,6.57亿元用于中山市南部组团垃…

目标检测论文解读复现【NO.22】多尺度下遥感小目标多头注意力检测

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

JavaWeb框架(四):JavaWeb项目基于三大组件实现的公司管理系统

MVC实战项目 Web 三大组件实现 公司管理系统需求:项目实战基于会话跟踪技术实现登录功能基于Filter过滤器实现登录验证功能基于Listener监听器监听ServletCntext对象的创建和销毁会话跟踪技术cookiesession对比Filter过滤器入门入门DemoFilter执行流程Filter拦截路径…

基于SSM+Maven+Shiro+Layui+Websocket在线论坛交流聊天bbs系统设计

开发软件:Idea Mysql Redis 开发技术: SSM Maven Shiro Websocket Bootstrap Layui 前台部分 1.用户注册登录模块 用户登录后,可以进行发帖回帖功能,在线签到功能,完善个人信息,添加好友,收藏贴子,评论帖子,点赞功能,记录功能(比如记录今天发生的…

(附源码)ssm巢湖学院校园报修系统 毕业设计 021813

SSM巢湖学院校园报修系统 摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达&…

行业认可|墨菲安全登信息通信软件供应链安全社区优秀榜单

11月以来信息通信软件供应链安全社区开展了“软件供应链优秀成果案例”征集评审活动,在 12 月 16 日的结果公示中,墨菲安全软件供应链安全管理平台本次成功入选自主研发创新成果。这是对墨菲安全长期专注在软件供应链安全领域的成果认可,我们…