走进 Apache Flink | 学习笔记(二)

简介: 快速学习走进 Apache Flink

开发者学堂课程【开源 Flink 极客训练营走进 Apache Flink】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/760/detail/13337


走进 Apache Flink


二、唯快不破–流批的本质

讨论流批本质时可以借助数据库辅助理解流与批的区别与联系。

可以用 insert 、update 、delete 来管理数据库,然后用 select 来查询。查询本身就是一种计算,同时还可以利用 trigger 来监控表数据的一些变化。

1.假如有一个需求,要实时显示某种表中的全部数据,应该用什么方式满足该需求?

如果用 insert 传入一个数据,然后用 update 更新一些信息。很容易想到用 select 可以查询表里面的一些数据,然后进行一些可视化的显示和监控。这里需要考虑一个问题,当执行了这一次查询之后,其实是一个手动触发,那么下次如何触发是不可预知的。可能10分钟,可能1小时,可能1天,甚至想起来再查一次,总而言之,无论什么时间去查询一次,不能做到只要数据表有变化就显示出来。如果要达到这样一个效果,可以利用孵化器。

比如定义一个 insert 的触发器,再定义一个 update 的触发器,这里以 insert 的触发器为例。定义完成后其逻辑是只要表里有 insert 数据,就立即触发查询并将结果写入到一个文件中。update 的触发器也同样触发查询并写入一个结果文件中。

对应的触发器及语句来说,就会生成两个结果文件,当执行 insert into 时,生成 trigger1,执行 update 时,再生产一个 trigger2.结果如下:

图片7.png

上图中的 insert 语句是将 clicks 更新为2,第一次查询时只有一个 Mary 1,第二次查询时本质上插入了一个 insert into Bob 1,所以第二次查询时出现了 Bob 1。

注意:该截图显示的是 insert 的触发器,所以两次查询中只有 insert 生效,update 的生效需要真正的去定义 update 的查询后再去进行才会生效。

2.流批计算的背后是在说什么?

图片8.png

既然数据库本身就可以完成流批的计算,为什么还需要很多的大数据批计算流计算的计算框架?

本质上,不管是流还是批,都是对数据的处理,尤其是对大数据的计算处理能力。

随着云计算、物联网、人工智能等信息的到来,人们步入了一个信息的时代。目前全球的数据量呈现几何的增长,下图是预测数据:

图片9.png

全球10年的时间,数据量从16.1ZB 增长到163ZB,该数据量已经远远超过单台计算机的存储和处理能力。(ZB 是一个更难想象的数据)

3.这些数据从哪里来?

目前的数据的确在非常快速的增长,比如 Facebook 的社交平台有几百亿、几千亿的照片信息,一些证券交易市场每天有几TB或十几TB 的交易数据量。

举例阿里巴巴:

图片10.png

10年来,阿里巴巴每年双十一的交易额增长了几千倍。在19年时,Flink 流计算的处理能力创造了25.5亿条每秒的处理记录。从种种事实来看,这些数据都是存在的(不知道不代表不发生),数据量的惊人是存在的,在某种程度上推动了技术的发展。

用户对技术的核心诉求?

首先是能够处理已有的数据,在能够处理已有数据的前提下,要求计算准确、迅速。

4.海量数据的技术支撑?

由谷歌发展的三大理论(三大马车):

图片11.png

解决了分布式存储和分布式计算,解决了这两个问题解决了当前的海量数据的增长,对该数据价值的挖掘提供了技术手段。

谷歌的三大马车描述了如何进行海量数据的分析的计算,但是其真正实现的落地是在谷歌内部。对于谷歌之外的公司完成分布式存储和分布式计算是通过 Apache Hadoop 生态。

图片12.png

 

对于该开源的生态,其体系是一个分布式的批计算框架,一般是若干小时或者若干天的计算延时。在实际的生产业务中,大多数在 T+1 的场景应用会应用 Hadoop 分布式计算(今天看到的结果是为昨天数据的统计分析),所以其很好的完成了在大数据环境中用户对海量数据支撑和计算准确性的需求。

本质是该需求得到满足,但是数小时的延时并不能认为是计算速度快,用户需要的快速是秒或毫秒级别,所以这种批计算没有很好的达到计算的快速问题。

一般来说,数据计算的多个处理环节叫 stage,批计算的逻辑是 stage by stage(当前的 stage 没有完成之前不能启用下一个 stage)。如果 n 个数据转换逻辑,从第一个 stage 的启动处理直到第 n 个 stage 处理完成后,才能有真正的具体结果。在数据量相同的情况下,业务逻辑还是同样的处理逻辑的情况下,降低业务的延时要通过流计算。

图片13.png

5.流计算的方式为什么能够解决该问题?

因为数据的处理就像流水一般,同时启动所有环节和逻辑,哪怕刚流第一滴水,就将这一滴水的处理逻辑都处理完成并输出这一滴水的处理结果留到下一步。这样不用等到所有数据到齐,将所有数据都执行完再输出结果,这种及时的计算模式就是流计算。因为该缘故,促使其在业务延时方面和批计算有天壤之别。

如果不看技术的实现,单从用户视角看流与批的本质区别,那就是“快”。也就是说流与批的本质区别是业务延时上的不同。

图片14.png

其本质上的快是相对的,不同的业务有不同的需求。当前所说的秒、毫秒和数天的延时是两个极端,在实际业务上还有分钟的延时、小时的延时等等小时间间隔的延时。针对这样的需求,在小时和分钟的业务上,无论是批计算还是流计算,都是可能满足的,所以流计算和批计算对用户来说并没有很大的关系,用户更注重计算结果的准确性。

图片15.png

基于现在的分析和判断,对于计算引擎计算从实现的角度看,所谓的触发(秒、小时、天)是引擎内部的触发机制的设计。比如可以每条记录都触发一次并计算输出结果,那么自然而然是最低的延时,如果将数据结果在所有数据结束后再触发一次计算并输出结果,那么延时显示是最高的。如果在触发机制上支持按业务需求指定时间的范围或记录触发计算,对用户而言已经足够。所以流和批本质上的选择,更多的是计算引擎自己的优化。(满足用户的需求即可)

一个流批统一的系统,其本质上是一个计算的模式。

触发批计算是数据结构之后的孵化,对流计算而言,计算引擎的设计会根据流批认知的不同。

6.两种主流的设计方案

目前有两种主流的设计方案,一种是说批是流的一个特点。既然可以每条数据都触发一条计算,那么也可以3条或者5条甚至一个小时后再触发一次,所以流计算引擎自然而然的会支持批计算,所以批计算依赖是流计算的一个特点。另一种说法是流是批的特例,既然能够瓒一批数据,如果每一批的数据只有一条,相对于每一天数据都触发了计算,意味着延时是最低的 ,也就是我们所说的流计算。

针对这两种认知的不同,计算引擎设计方案一种是 Native Streaming 模式,另一种是 Micro-Batching 模式。

图片16.png

Native Streaming 模式就是认为批是流的特例,该概念本质上更贴切流的概念,流监控的一些消息等都是一条一条处理的。Native Streaming 模式每条数据都触发计算这种机制会最大程度的降低计算延时,Native Streaming 模式占据了流计算第一个核心能力。

Micro-Batching 模式是认为流是批的特例,流计算就是将连续不断的批计算、批数据进行持续的计算,如果批足够小,那么延时就足够小,在一定程度上,这种设计满足了百分之九十九的实时计算场景。另外百分之一是架构的原因,因为 Micro-Batching 模式在设计上就有一个瓒批的过程(对批数据进行调用计算的过程),会增加一定的延时。

Apache Flink 是 Native Streaming 模式的一个流批统一的计算模式。

总结:

图片17.png

从数据集和计算过程两个维度看,批计算一定是有限的数据集,一次计算一次数据结果,流计算本身的数据集可以是无限的,有限的数据集合也可以以流的方式计算,同时流计算要进行结果的不断输出,如果结果有更新也要不断的进行历史结果的更新。

具体实例:

图片18.png

 

假设有一张用户点击实现表,表中有时间戳和用户姓名,需求是进行页面的 pv 统计(进行简单的 select count(*)的一个table),对于批查询,手动执行输入即可,执行一次立即输出一个查询结果。

对于目前的 select count(*)FROM user_clicks 会输出6,因为在执行查询的手动孵化有6个点击事件,如果后面还有用户点击事件发生,该结果不会更改,如果想知道最新的结果必须再次手动触发。

如果目前该查询需求用流计算的查询模式,当第一条事件到达时就会触发一次计算,触发计算时该 count 为1,第二条事件到达时又会触发一次计算,count 为2,依此类推,每条数据到达都会触发一次计算,最终第六条数据到达时,和批的计算结果数据集一样,计算逻辑也一样时,则查询的结果和批是一样的。虽然两种计算模式不一样,但是计算结果一样。所以对用户而言,批和流他们能感知的一个是计算结果,一个是计算结果速度的延时。

对于初学者来说,直观的认识到流和批是两种计算方式和计算结果输出方式的不同以及他们最终结果一致性的相同就可以继续后面的内容。

相关实践学习
基于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日以线上峰会的形式与大家见面。
相关文章
|
2月前
|
人工智能 数据处理 API
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
Apache Flink Agents 是由阿里云、Ververica、Confluent 与 LinkedIn 联合推出的开源子项目,旨在基于 Flink 构建可扩展、事件驱动的生产级 AI 智能体框架,实现数据与智能的实时融合。
442 6
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
343 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
4月前
|
SQL 人工智能 数据挖掘
Apache Flink:从实时数据分析到实时AI
Apache Flink 是实时数据处理领域的核心技术,历经十年发展,已从学术项目成长为实时计算的事实标准。它在现代数据架构中发挥着关键作用,支持实时数据分析、湖仓集成及实时 AI 应用。随着 Flink 2.0 的发布,其在流式湖仓、AI 驱动决策等方面展现出强大潜力,正推动企业迈向智能化、实时化的新阶段。
597 9
Apache Flink:从实时数据分析到实时AI
|
4月前
|
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 及状态管理,显著提升作业稳定性与资源利用率。
539 0
|
3月前
|
人工智能 运维 Java
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
本文基于Apache Flink PMC成员宋辛童在Community Over Code Asia 2025的演讲,深入解析Flink Agents项目的技术背景、架构设计与应用场景。该项目聚焦事件驱动型AI智能体,结合Flink的实时处理能力,推动AI在工业场景中的工程化落地,涵盖智能运维、直播分析等典型应用,展现其在AI发展第四层次——智能体AI中的重要意义。
1315 27
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
|
4月前
|
存储 人工智能 数据处理
对话王峰:Apache Flink 在 AI 时代的“剑锋”所向
Flink 2.0 架构升级实现存算分离,迈向彻底云原生化,支持更大规模状态管理、提升资源效率、增强容灾能力。通过流批一体与 AI 场景融合,推动实时计算向智能化演进。生态项目如 Paimon、Fluss 和 Flink CDC 构建湖流一体架构,实现分钟级时效性与低成本平衡。未来,Flink 将深化 AI Agents 框架,引领事件驱动的智能数据处理新方向。
500 6
|
4月前
|
消息中间件 存储 Kafka
Apache Flink错误处理实战手册:2年生产环境调试经验总结
本文由 Ververica 客户成功经理 Naci Simsek 撰写,基于其在多个行业 Flink 项目中的实战经验,总结了 Apache Flink 生产环境中常见的三大典型问题及其解决方案。内容涵盖 Kafka 连接器迁移导致的状态管理问题、任务槽负载不均问题以及 Kryo 序列化引发的性能陷阱,旨在帮助企业开发者避免常见误区,提升实时流处理系统的稳定性与性能。
435 0
Apache Flink错误处理实战手册:2年生产环境调试经验总结
|
9月前
|
SQL 存储 人工智能
Apache Flink 2.0.0: 实时数据处理的新纪元
Apache Flink 2.0.0 正式发布!这是自 Flink 1.0 发布九年以来的首次重大更新,凝聚了社区两年的努力。此版本引入分离式状态管理、物化表、流批统一等创新功能,优化云原生环境下的资源利用与性能表现,并强化了对人工智能工作流的支持。同时,Flink 2.0 对 API 和配置进行了全面清理,移除了过时组件,为未来的发展奠定了坚实基础。感谢 165 位贡献者的辛勤付出,共同推动实时计算进入新纪元!
1092 1
Apache Flink 2.0.0: 实时数据处理的新纪元
|
9月前
|
存储 大数据 数据处理
您有一份 Apache Flink 社区年度报告请查收~
您有一份 Apache Flink 社区年度报告请查收~
166 0

推荐镜像

更多