《Apache Flink 案例集(2022版)》——2.数据分析——快手-Flink SQL 在快手的扩展和实践(2)

简介: 《Apache Flink 案例集(2022版)》——2.数据分析——快手-Flink SQL 在快手的扩展和实践(2)

《Apache Flink 案例集(2022版)》——2.数据分析——快手-Flink SQL 在快手的扩展和实践(1) https://developer.aliyun.com/article/1228373



生产实践


一、功能扩展


为了支持内部的业务需求,快手做了很多功能扩展,其中两个围绕窗口的扩展尤为重要:一个是 Group Window Aggregate 扩展,一个是在 Flip-145 里提出的 Window Table-valued Function 扩展。  


1. Group Window Aggregate 扩展


快手在 Group Window Aggregate 上做了两个扩展,一个是支持多维聚合,一个是引入高阶窗口函数。


Flink SQL 很早就支持无限流上的多维聚合,快手在 Group Window Aggregate 上也增加了多维分析的功能,支持标准的 Grouping Sets、Rollup 和 CUBE 子句,另外还支持各种窗口类型,比如滚动、滑动、会话窗口等。


比如上图实例,需要统计主题维度和总维度下的累计 UV,SQL 的 group by 子句里包含两部分:一个是 CUMULATE 窗口函数,一个是 Grouping Sets 子句。括号里有两个元素:一个表示总维度,一个表示主题维度。


image.png


数据分析的开发者经常会遇到这样的需求,绘制一条曲线,每个点的含义是当天 0 点到当前时间点的累计指标,横坐标表示时间,纵坐标是表示累计的指标。对这样的需求可以有两个解决方案:  


第一个方案是使用无限流聚合,把时间归一到分钟粒度以后作为 group key 的一列,但是业务上要求输出到屏幕上的曲线不再变化,而无限流聚合的输出结果是一个更新流,所以不符合要求;


第二个方案是使用一天的滚动窗口函数。为了提前输出结果,还是要设置提前触发,时间点选用当前机器的时间或者是历史输入数据里最大的时间戳。这个方案的缺点,首先是每个点的纵坐标的值并不是这个时间点上的累计值。这会导致几个异常现象,比如作业失败重启或者是业务主动回溯历史的时候,不能完全还原当时的历史曲线。而且各个点上分维度的累计值加起来也不等于总维度的值。还有一个缺点,统计 UV 的时候,我们经常会使用两阶段的聚合来避免 distinct key 的倾斜,但是使用这个方案的时候,原本自身的曲线上可能会出现凹坑。  


我们引入 CUMULATE 窗口来解决这些问题,主要有两方面的优点:  


第一是使用窗口的结束时间作为每个点的横坐标,曲线上每个点的纵坐标就是在横坐标对应时间点上的累计值,所以无论在回溯历史或者是作业发生 failover 的情况下,曲线都可以完全还原,而且各个时间点上分维度的值加起来总是等于总维度的值;


第二是使用两阶段聚合,能够防止 distinct key 倾斜。由于数据是在窗口结束的时候才发送,所以不存在撤回,输出的是 append 流,因此自增曲线上也不会有凹坑。


2. Window Table-valued Function 扩展

image.png


社区在 FLIP-145 中提出 Window Table-valued Function (Window TVF) 语法,并且实现了窗口聚合。在这个基础上我们丰富了窗口算子,包括 TopN、关联和去重,还支持了一个单独的 Window TVF 查询语句,这些功能都已经陆续推到社区的各个版本里。有了这些窗口的算子,用户就可以用 Flink SQL 实现更复杂的业务逻辑。  


image.png


如上图案例,需要统计当天最热销的 100 件商品的销售额和买家数,以及这些爆品所属主播的销售情况。首先做一个窗口聚合,得到 0 点以来每个商品的销售额和买家数,再做一个窗口聚合,得到每个主播所有宝贝的买家数,两个结果做窗口关联,最后做窗口上的 TopN,得到前 100 名爆品以及它的各项累计指标。  


此外快手在Window TVF上还增加了对批模式的支持。原理是引入一个 windows 算子,给输入数据附上所属的窗口属性后发给下游,而下游的算子复用批上已经存在的算子,比如说聚合上是用 HashAgg 或者 SortAgg,关联上是 HashJoin 或者 SortMergeJoin,这些批上的算子和流模式下的算子相比,不需要状态,所以吞吐上也有更好的表现。

相关实践学习
基于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日以线上峰会的形式与大家见面。
相关文章
|
人工智能 数据处理 API
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
Apache Flink Agents 是由阿里云、Ververica、Confluent 与 LinkedIn 联合推出的开源子项目,旨在基于 Flink 构建可扩展、事件驱动的生产级 AI 智能体框架,实现数据与智能的实时融合。
1725 6
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
1478 43
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
841 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
SQL 人工智能 数据挖掘
Apache Flink:从实时数据分析到实时AI
Apache Flink 是实时数据处理领域的核心技术,历经十年发展,已从学术项目成长为实时计算的事实标准。它在现代数据架构中发挥着关键作用,支持实时数据分析、湖仓集成及实时 AI 应用。随着 Flink 2.0 的发布,其在流式湖仓、AI 驱动决策等方面展现出强大潜力,正推动企业迈向智能化、实时化的新阶段。
1417 9
Apache Flink:从实时数据分析到实时AI
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
759 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
SQL 人工智能 API
Apache Flink 2.1.0: 面向实时 Data + AI 全面升级,开启智能流处理新纪元
Apache Flink 2.1.0 正式发布,标志着实时数据处理引擎向统一 Data + AI 平台迈进。新版本强化了实时 AI 能力,支持通过 Flink SQL 和 Table API 创建及调用 AI 模型,新增 Model DDL、ML_PREDICT 表值函数等功能,实现端到端的实时 AI 工作流。同时增强了 Flink SQL 的流处理能力,引入 Process Table Functions(PTFs)、Variant 数据类型,优化流式 Join 及状态管理,显著提升作业稳定性与资源利用率。
1087 0
|
人工智能 运维 Java
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
本文基于Apache Flink PMC成员宋辛童在Community Over Code Asia 2025的演讲,深入解析Flink Agents项目的技术背景、架构设计与应用场景。该项目聚焦事件驱动型AI智能体,结合Flink的实时处理能力,推动AI在工业场景中的工程化落地,涵盖智能运维、直播分析等典型应用,展现其在AI发展第四层次——智能体AI中的重要意义。
3846 27
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
|
存储 人工智能 数据处理
对话王峰:Apache Flink 在 AI 时代的“剑锋”所向
Flink 2.0 架构升级实现存算分离,迈向彻底云原生化,支持更大规模状态管理、提升资源效率、增强容灾能力。通过流批一体与 AI 场景融合,推动实时计算向智能化演进。生态项目如 Paimon、Fluss 和 Flink CDC 构建湖流一体架构,实现分钟级时效性与低成本平衡。未来,Flink 将深化 AI Agents 框架,引领事件驱动的智能数据处理新方向。
1256 6
|
消息中间件 存储 Kafka
Apache Flink错误处理实战手册:2年生产环境调试经验总结
本文由 Ververica 客户成功经理 Naci Simsek 撰写,基于其在多个行业 Flink 项目中的实战经验,总结了 Apache Flink 生产环境中常见的三大典型问题及其解决方案。内容涵盖 Kafka 连接器迁移导致的状态管理问题、任务槽负载不均问题以及 Kryo 序列化引发的性能陷阱,旨在帮助企业开发者避免常见误区,提升实时流处理系统的稳定性与性能。
1019 0
Apache Flink错误处理实战手册:2年生产环境调试经验总结
|
SQL 消息中间件 Kafka
Flink SQL 详解:流批一体处理的强大工具
Flink SQL 是 Apache Flink 提供的 SQL 引擎,支持流批一体处理,统一操作流数据与批数据,具备高性能、低延迟、丰富数据源支持及标准 SQL 兼容性,适用于实时与离线数据分析。
1408 1

热门文章

最新文章

相关产品

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

    更多