HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

Flink 从实时计算到流式数仓,下一步去往哪里?

  • 2022-09-15
    北京
  • 本文字数:3445 字

    阅读完需:约 11 分钟

Flink 从实时计算到流式数仓,下一步去往哪里?

嘉宾 |张蛟

编辑 |贾亚宁


小米从 2019 年开始引入 Flink 并处理实时计算相关的需求,从第一个接入的版本 1.7 到最新的 1.14,累计已升级更新了 6 个大的版本,目前已接入包括数据采集、信息流广告、搜索推荐、用户画像、金融等在内的全集团所有业务线的 3000+ 任务,日均处理 10 万亿 + 的消息,并在国内外搭建了 10+ 集群。


那么,小米在引入 Flink 后遇到了哪些挑战?又是如何解决的?Flink 最终又会走向哪里呢?基于对以上问题的好奇,我们找到了小米大数据部高级开发工程师张蛟,他是 Apache Flink Contributor,主要负责小米基于 Flink 的实时计算框架内核层方面的研发工作。


同时张蛟老师也是已经上线的 QCon+ 案例研习社「Flink 在实时计算应用场景中的落地实践」专题的讲师,因此我们针对 Flink 相关的疑惑和好奇对张蛟老师进行了采访,一起来看看老师的思考吧。

InfoQ:你最近在负责什么样的工作呢?


张蛟:我目前在小米计算平台部,主要是负责开发和维护小米实时计算平台 Flink 框架内核相关的工作,包括内部新特性的开发、用户使用上的支持、Flink 社区的参与、框架的日常维护等。目前主要面向的是集团内部的用户,为公司的各条业务线的数据开发人员提供数据处理的能力和支撑,更好地赋能业务的发展。


我们在社区开源 Flink 的基础上,根据小米集团使用的特点和个性化需求,进行了比较多的定制化开发,其中有些问题和功能是内部使用场景上会碰到的,因此维护在内部版本上;还有些是各个公司都会遇到和需要的通用场景,我们也会将其反馈给社区。当然也会将我们在开发维护中的经验教训和技术进行分享交流,实现共同进步。

InfoQ:在你的日常工作中,你有遇到过什么印象深刻的挑战吗?


张蛟:在使用 Flink 的过程中,实际上我觉得有两类问题还是比较突出的:


  1. Flink 的运维问题,尤其是版本升级问题


社区 Flink 版本的升级迭代是比较快的,基本上每三到四个月就会发布一个比较大的版本,而由于内部版本存在着非常多的无法合并到社区的 patch,再加上目前各个版本之间的兼容性并不是很好,包括 checkpoint 在跨版本之间不保证兼容性、API 有时也会发生改变等,导致 Flink 集群升级变成一件非常痛苦的事情,内部甚至不得不同时维护 Flink 的多个版本。


目前,我们还是做了很多事情,包括内部 patch 的梳理整合、升级兼容性的自动检测、checkpoint 的兼容处理开发等等。社区目前也注意到了这方面的情况,除了规范化 Flink 的版本发布周期外,也在新版本中对新旧版本 API 进行了兼容保证。并不能说通过这些手段已经完全解决了这个问题,但至少在一定程度上降低了升级的复杂性和成本。


  1. Flink 的消费问题


其实 Flink 的入门是比较简单的,即使对于 Flink 不那么熟悉的用户,通过阅读文档或是查阅网络上的资料抑或是阅读我们提供的典型场景的使用范例,一般几天就能实现自己的需求,尤其是从 Flink 1.9 开始对 SQL 的支持日趋完善,用户基本上可以完全不写任何代码依靠纯 SQL 就可以完成需求,但跑起来后用户就可能会遇到消息积压的问题,可能的原因有很多,包括 Source 读取速度慢、消息处理逻辑复杂导致消费速度慢、状态读取速度慢影响处理性能、Sink 写入速度慢、消息出现了短时间的流量高峰、消息处理出现异常等等问题。


解决办法也有很多,比如参数的调整、增大作业并行度、排查上下游的读写瓶颈、优化消息处理逻辑等。当然,优化处理逻辑还是比较困难的,尤其是 Flink SQL 的处理代码都是框架自动生成的,还是比较难进行优化的,一般我们都会将一些比较常见的优化作为参数提供给有需要的用户来手动配置。

InfoQ:Flink 近些年一直在强调流批一体,它在小米目前有哪些应用场景呢?分享一下你们的实践和探索吧。


张蛟:其实批处理与流处理还是有一定的区别,比如说流处理是事件驱动,也就是说事件来了之后就可以驱动进行处理,但是批处理一般都需要一个调度系统来进行调度,用于控制触发的时间和条件等,目前结合小米内部的蜂鸟调度系统 +Flink+Iceberg 数据湖技术,我们在去年就已经跑通了 Flink 批流处理的整个流程。


在今年,小米正在大力推动流批一体,使用场景既包括新业务新场景直接使用 Flink 批流一体进行开发,也包括老的场景将其批处理场景切换到 Flink 中,实现 Flink 一套框架完成其所有的计算场景。目前,我们主要是在数仓团队进行推广使用,通过 Flink 提供的批流融合能力,加上 Iceberg 的批流读写接口,大大地简化了数据 ETL 链路。


流批一体的优势在于可以使用一套代码完成业务逻辑,并且由于相同框架的批流处理底层是使用相同的 API 解决业务口径问题,这样不仅提升了业务的开发效率,也消除了口径不统一带来的数据质量问题,对于业务来说其可以将更多的精力专注到业务的实现而不是计算引擎的选型、对比数据质量的保证等问题。

InfoQ:如何看待 Flink 在实时计算方面已趋于成熟这个话题,你认为 Flink 还会有哪些迭代,会如何发展呢?


张蛟:目前来看,经过这些年的发展,Flink 在实时计算方面实际上已经成为了事实上的标准,目前已有功能已经可以基本上解决所有场景的实时计算需求。因此,下一步 Flink 的发力点可能有:


  1. 发力离线计算领域


完全统一计算框架,甚至实现用户可以完全不用区分实时和离线计算的场景,减少用户的学习成本和底层开发人员和公司维护两套框架的运维成本。当然,这并不是一个简单的事情,如果用户和公司在做这件事情上没有显著收益的话,从业务层面看是很难推动的。

此外,批流分开处理的思想已经深入人心,要想让业务方转变思维也不是一个简单的事情,这一切都依赖于技术的不断进步和时间的证明。


  1. 发力 OLAP 数据查询领域


目前 OLAP 查询引擎还是比较多,处在一个百家争鸣的状态,实时计算的结果需要收集到下游存储系统并基于该数据进行查询,如果能够直接优化和查询 Flink 的计算结果,并同时复用 Flink 的计算能力,那么是不是能够提供更高的查询实时性,而且还能节约存储成本呢?


当然,这个还会有比较多的工作要做,比如查询的性能优化,能否解决存储、计算和查询相互影响的问题等等,我们可以欣喜地看见 Flink 实际上正不断地在这个方向上进行发力。总的来说,我个人认为 Flink 不会满足于在实时计算领域取得的成就,会有更多更好用的功能持续推出,并促进整个社区的不断发展。

InfoQ:你如何看待最新提出的流式数仓这个概念?它将来会有哪些应用场景?


张蛟:流式数仓主要是为了解决在数仓开发中的离线和实时一体化问题,目前绝大多数的数仓开发依然还是在使用 Lambda 架构,也就是通过实时链路产生实时数据用于解决实时性需求比较高的在线分析场景,而采用离线链路对历史数据进行修正以保证数据的正确性和完整性,这不仅影响了开发效率,增大了开发成本,同时也带来了数据口径问题。


同时,由于实时链路一般都使用 Kafka 等消息队列作为中间存储,虽然 Kafka 写入效率比较高,但它的存储时间有限,只支持追加不支持更新,不支持 OLAP 查询等问题。而 Flink 通过引入 Dynamic table(动态表)来存储实时链路产生的分层数据,即可直接存储中间结果并分析,而无需引入第三方存储和 OLAP 引擎,真正实现了中间存储和计算的一体化。


目前来说,Flink+Iceberg 数据湖方案可以看做一个替代方案,虽然是额外引入了第三方组件 Iceberg,但是通过 Iceberg 支持的事务读写的能力以及行级更新机制,基本上可以解决目前这方面遇到的大部分场景。

InfoQ:最后,对想要深入了解并应用 Flink 的小伙伴说些什么吧!


张蛟:我个人认为,由浅入深是学习一门新技术的最佳途径,先尝试使用再了解原理,做到知其然再知其所以然,我个人其实不是很推荐直接去看源码,实际上 Flink 框架源码的代码量还是比较大的,如果不能带着问题去看,很大可能是坚持不下去的,即使坚持下去了,效果也可能不太理想,最终很可能是事倍功半的效果。


当然每个人的学习思路和学习习惯可能不尽相同,但就我个人来说,多看 Flink 社区的官方文档和 FLIP 改进提案,多参与社区 issue 的讨论和 code review,都是非常有帮助的。最后,持续学习值得拥有,肯定不会后悔。


作者简介


张蛟 小米 大数据部高级开发工程师


Apache Flink Contributor,现任小米大数据部高级软件工程师,主要负责小米基于 Flink 的实时计算框架内核层方面的研发工作,曾任京东大数据部高级研发工程师、爱奇艺商业智能部资深研发工程师,在大数据实时处理方向有多年的从业经历并积累了丰富的工作经验。


推荐阅读

Flink & 低代码:为应用实时计算铺平道路

京东这样用 Flink:适应业务的才是最好的

聊聊 Flink Table Store:流批一体存储最新进展|InfoQ大会早班车第16期


2022-09-15 18:029944

评论

发布
暂无评论
发现更多内容

如何编写一个健壮的 npm 包 | 京东云技术团队

京东科技开发者

npm npm chalk-next 企业号 5 月 PK 榜

顺丰科技携手飞桨自研“智能外呼机器人”,为客户打造优质服务体验

飞桨PaddlePaddle

nlp 语音识别 百度飞桨

Spring Validated 校验框架,让你的项目更简洁,提升开发效率

做梦都在改BUG

Java spring Validated

Nautilus Chain开启全球行,普及Layer3概念加速其采用

鳄鱼视界

CFS第十二届财经峰会7月举行, 候选品牌:行云管家

行云管家

云计算 商业 财经峰会

前端微服务无界实践 | 京东云技术团队

京东科技开发者

微服务 前端 企业号 5 月 PK 榜 无界

阿里逆天级调优方案,内部这套Java性能调优实战宝典,堪称教科书

做梦都在改BUG

Java 性能优化 JVM 性能调优

浅析 Redis 中 String 数据类型及其底层编码

做梦都在改BUG

redis 数据结构 string

开源堡垒机和免费商业堡垒机哪个用的更香?

行云管家

开源 网络安全 免费堡垒机

羊了个羊游戏|链游dapp系统开发方案

Congge420

Gamefi很有潜力?分析链游gamefi系统开发源码!

Congge420

牛客网最新开源!共1600+页 ,堪称Java面试八股文的天花板

采菊东篱下

程序员 java面试

iMovie for Mac(专业视频剪辑工具) v10.3.6中文版

Rose

Mac视频剪辑软件 iMovie中文版 iMovie下载 iMovie Mac破解版

万字长文详述ClickHouse在京喜达实时数据的探索与实践 | 京东云技术团队

京东科技开发者

数据库 flink Clickhouse 企业号 5 月 PK 榜

Elasticsearch之join关联查询及使用场景 | 京东云技术团队

京东科技开发者

数据库 elasticsearch sql join 企业号 5 月 PK 榜

3种分页列表缓存方式,速收藏~~

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

百度营销首创CPQL模式,破解汽车营销线索难题

Geek_2d6073

TDengine 成功“晋级” Percona Live 2023 银牌赞助商,开发者驻足关注

爱倒腾的程序员

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

阿里云大数据AI技术

人工智能 模型 Stable Diffusion 企业号 5 月 PK 榜

什么是数字藏品|数字藏品系统开发源码?

Congge420

名不虚传!字节技术官甩出的"保姆级"数据结构与算法笔记太香了

做梦都在改BUG

Java 数据结构 算法 LeetCode

公网对讲SDK——对讲应用场景

anyRTC开发者

音视频 视频会议 指挥调度 快对讲 公网对讲

字节Java全能手册火了!多线程/网络/性能调优/框架啥都有

做梦都在改BUG

Java 微服务 Spring Cloud socket

首个机器学习实时特征平台测试基准论文被 VLDB 2023 录取

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

首站中科院!百度商业AI技术创新大赛开启巡回宣讲

百度Geek说

人工智能 百度 企业号 5 月 PK 榜

Github标星67.9k的微服务架构以及架构设计模式笔记我粉了

做梦都在改BUG

Java 架构 微服务 设计模式

如何做好需求管理?华为云需求管理利器CodeArts Req解读

华为云PaaS服务小智

云计算 产品经理 需求管理 华为云

Iframe在Vue中的状态保持技术 | 京东云技术团队

京东科技开发者

html Vue iframe 跨域 iframe 企业号 5 月 PK 榜

火山引擎DataTester:如何使用A/B测试优化全域营销效果

字节跳动数据平台

AB testing实战 ab测试 A/B测试

1个Java程序员需要具备什么样的素质和能力才可以称得上高级工程师?

Java永远的神

程序员 后端 架构师 java面试 Java性能优化

选择小程序第三方开发框架,你需要知道这些

没有用户名丶

Flink 从实时计算到流式数仓,下一步去往哪里?_QCon+_Alice_InfoQ精选文章