Flink 内核原理与实现-应用(下)

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: Flink 内核原理与实现-应用
  • Fold

       Fold与Reduce类似,区别在于Fold是一个提供了初始值的Reduce,用初始值进行合并运算。该类运算应用在KeyedStream上,输出结果为DataStream。Folder接口对应的是FoldFunction,其类泛型为FoldFunction<O,T>,O为KeyStream中的数据类型,T为初始值类型和Fold方法返回值类型。


640.png


FoldFunction<O,T>已经被标记为Deprecated废弃,替代接口是AggregateFunction<IN,ACC,OUT>。


640.png


  • Aggregation

       渐进聚合具有相同Key的数据流元素,以min和minBy为例,min返回的是整个KeyedStream的最小值,按照Key进行分组,返回每个组的最小值。聚合运算输出结果为DataStream。


a1530f9427a8ee8e005ef0a045385fae.png


  • Window

       对KeyedStream数据,按照Key进行时间窗口切分。输出结果为WindowedStream。输出结果的类泛型为<T,K,W extends Window>,T为KeyedStream中的元素数据类型,K为指定Key的数据类型,W为窗口类型。


565bb83b5064bbb930319f07704bb79a.png


  • WindowAll

       对一般的DataStream进行窗口切分,即全局一个窗口。输出结果为AllWindowedStream。


846ae4b04accf658ad4c5d623c7f6f75.png


        注意:在一般的DataStream上进行窗口切分,往往会导致无法并行计算,所有的数据都集中在WindowAll算子的一个Task上。


  • Window Apply

       将Window函数应用到窗口上,Window函数将一个窗口的数据作为整体进行处理。Window Stream有两种:分组后的WindowedStream和未分组的AllWindowedStream。


       1、WindowedStream

           WindowedStream上应用的是WindowFunction,输出结果为DataStream。WindowFunction<IN,OUT,KEY,W extends Window>中IN表示输入值的类型,OUT表示输出值的类型,KEY表示Key的类型,W表示窗口的类型。


c49b0ebb9225d7f0ddf0e94bd85abf3a.png


       2、AllWindowedStream

           AllWindowedStream上应用的是AllWindowFunction,输出结果为DataStream。AllWindowFunction<IN,OUT,KEY,W extends Window>中IN表示输入值的类型,OUT表示输出值的类型,KEY表示Key的类型,W表示窗口的类型。


f8a8c3b65cdd00d795ee5b7a7d267323.png


  • Window Reduce

       在WindowedStream上应用ReduceFunction,结果输出为DataStream。


4e6f2eae2baf89122ffcb25a33b29080.png


  • Window Fold

       在WindowedStream上应用FoldFunction,结果输出为DataStream。


558b2c71d8a68ecd39dc778901fa863a.png


  • Window Aggregation

       统计聚合运算,在WindowedStream应用该运算,应用AggregationFunction,输出结果为DataStream。


3a9caef956503f5795bc126975870ed8.png


  • Union

       把两个或多个DataStream合并,所有DataStream中的元素都会组合成一个新的DataStream,但是不去重,如果在自身上应用Union运算,则每个元素在新的DataStram出现两次。


783a9ebb85ee1bbc157ad245eb21e8c8.png


  • Window Join

       在相同时间范围的窗口上Join两个DataStream数据流,输出结果为DataStream。Join核心逻辑在JoinFunction<IN1,IN2,OUT>中实现,IN1为第一个DataStream中的数据类型,IN2为第二个DataStream中的数据类型,OUT为Join结果的数据类型。


4417b773b5ed93e91173238e6a47b531.png


  • Interval Join

       对两次KeyedStream进行Join,需要指定时间范围和Join时使用的Key,输出结果为DataStream。Join的核心逻辑在ProcessJoinFunction<IN1,IN2,OUT>中实现,IN1为第一个DataStream中的元素数据类型,IN2为第2个DataStream中的元素数据类型,OUT为结果输出类型。


64dcd4c3ac78c9811d62163acf6fc66c.png


  • WindowCoGroup

       两个DataStream在相同时间窗口上应用CoGroup运算,输出结果为DataStream,CoGroup和Join功能类似,CoGroup接口对应的是CoGroupFunction,其类泛型为CoGroupFunction<IN1,IN2,O>,IN1代表第一个DataStream中是元素类型,IN2代表第二个DataStream中是元素类型,O为输出结果类型。


8f13777e525e8a560f6a7a86e3901395.png


  • CoMap和CoFlatMap

       在ConnectedStream上应用Map和FlatMap运算,输出流为DataStream。其基本逻辑类似于在一般DataStream上的Map和FlatMap运算,区别在于CoMap转换有2个输入,Map转换有1个输入,CoFlatMap同理。


0b76fd6bb0d97ebd49a6b2624d710899.png

a280022f517264a5a679c3ee3a37cf0c.png


  • Split

       将DataStream按照条件切分多个DataStream,输出流为SplitDataStream。该方法已经标记为废弃,推荐使用SideOutput。


3d1ea846ec982138c008f9ae34b22ac4.png


  • Select

       Select与Split运算配合使用,在Split运算中切分的多个DataStream中,Select用来选择其中某一个具体的DataStream。


7ceee75b8a3ef4d1fc63985853bb51d5.png


  • Iterate

       在API层面上,对DataStream应用迭代会生成1个IteractiveStream,然后在IteractiveSteram应用业务处理逻辑,最终生成一个新的DataStream,在数据流中创建一个迭代循环,将下游的输出发送给上游重新处理。


24102334deb16045bc867ba7a04fc867.png


  • Extract Timestamps

       从记录中提取时间戳,并生成WaterMark。该类运算不会改变DataStram。


eec103bf94d7b6087ad4396388fa8670.png


  • Project

       该类运算只适用于Tuple类型的DataStream,使用Project选取子Tuple,可以选择Tuple的部分元素,可以改变元素顺序,类似于SQL语句中的Select子句,输出流仍然是DataStream。


0f47270d55b48b51a6c491043db43e2d.png


4.3 旁路输出


       旁路输出在Flink中叫做SideOutput,类似于DataStream#split,本质上是一个数据流的切分行为,按照条件将DataStream切分为多个子数据流,子数据流叫做旁路输出数据流。每个旁路输出数据流可以有自己的下游处理逻辑。

0e4a485df32851e16a1d65cb4f8ad57c.png

旁路输出数据流的数据类型可以与上游数据流不同,多个旁路输出数据流的数据类型也不必相同。


如何使用旁路输出:


1、定义OutputTag,OutpuTag是每一个下游分支的标识。


ce95f4a0d820217bf915b45734d61bdf.png

0d4f27258b60942f8b913928ef3990bd.png


2、获取旁路输出


79408ea0430be8c792fd1f96db4d25ca.png


接下来Flink核心篇,如果对Flink感兴趣或者正在使用的小伙伴,可以加我入群一起探讨学习。

相关实践学习
基于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日以线上峰会的形式与大家见面。
相关文章
|
12月前
|
分布式计算 数据处理 Apache
Spark和Flink的区别是什么?如何选择?都应用在哪些行业?
【10月更文挑战第10天】Spark和Flink的区别是什么?如何选择?都应用在哪些行业?
1210 1
|
7月前
|
存储 运维 监控
阿里妈妈基于 Flink+Paimon 的 Lakehouse 应用实践
本文总结了阿里妈妈数据技术专家陈亮在Flink Forward Asia 2024大会上的分享,围绕广告业务背景、架构设计及湖仓方案演进展开。内容涵盖广告生态运作、实时数仓挑战与优化,以及基于Paimon的湖仓方案优势。通过分层设计与技术优化,实现业务交付周期缩短30%以上,资源开销降低40%,并大幅提升系统稳定性和运营效率。文章还介绍了阿里云实时计算Flink版的免费试用活动,助力企业探索实时计算与湖仓一体化解决方案。
837 3
阿里妈妈基于 Flink+Paimon 的 Lakehouse 应用实践
|
7月前
|
SQL 弹性计算 DataWorks
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
303 6
|
10月前
|
消息中间件 JSON 数据库
探索Flink动态CEP:杭州银行的实战案例
本文由杭州银行大数据工程师唐占峰、欧阳武林撰写,介绍Flink动态CEP的定义、应用场景、技术实现及使用方式。Flink动态CEP是基于Flink的复杂事件处理库,支持在不重启服务的情况下动态更新规则,适应快速变化的业务需求。文章详细阐述了其在反洗钱、反欺诈和实时营销等金融领域的应用,并展示了某金融机构的实际应用案例。通过动态CEP,用户可以实时调整规则,提高系统的灵活性和响应速度,降低维护成本。文中还提供了具体的代码示例和技术细节,帮助读者理解和使用Flink动态CEP。
1133 2
探索Flink动态CEP:杭州银行的实战案例
|
10月前
|
存储 物联网 大数据
探索阿里云 Flink 物化表:原理、优势与应用场景全解析
阿里云Flink的物化表是流批一体化平台中的关键特性,支持低延迟实时更新、灵活查询性能、无缝流批处理和高容错性。它广泛应用于电商、物联网和金融等领域,助力企业高效处理实时数据,提升业务决策能力。实践案例表明,物化表显著提高了交易欺诈损失率的控制和信贷审批效率,推动企业在数字化转型中取得竞争优势。
389 16
|
12月前
|
存储 SQL 分布式计算
大数据-127 - Flink State 04篇 状态原理和原理剖析:状态存储 Part2
大数据-127 - Flink State 04篇 状态原理和原理剖析:状态存储 Part2
109 0
|
12月前
|
存储 消息中间件 大数据
大数据-126 - Flink State 03篇 状态原理和原理剖析:状态存储 Part1
大数据-126 - Flink State 03篇 状态原理和原理剖析:状态存储 Part1
234 0
|
12月前
|
存储 SQL 分布式计算
大数据-125 - Flink State 02篇 状态原理和原理剖析:广播状态
大数据-125 - Flink State 02篇 状态原理和原理剖析:广播状态
158 0
|
SQL 机器学习/深度学习 人工智能
Flink 实战:如何解决应用中的技术难题?
倒计时 5 天!4月25-26日,全球首个 Apache 顶级项目在线会议 Flink Forward 精华版即将重磅开启。 Flink Forward 全球在线会议精华版均为中文直播,核心内容分为 Keynote 与社区投票的最感兴趣的 talk 两部分,由 Apache Flink 核心贡献者们对原版英文 talk 进行翻译及解说,您可直接免费在线观看。
Flink 实战:如何解决应用中的技术难题?
|
2月前
|
存储 分布式计算 数据处理
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
阿里云实时计算Flink团队,全球领先的流计算引擎缔造者,支撑双11万亿级数据处理,推动Apache Flink技术发展。现招募Flink执行引擎、存储引擎、数据通道、平台管控及产品经理人才,地点覆盖北京、杭州、上海。技术深度参与开源核心,打造企业级实时计算解决方案,助力全球企业实现毫秒洞察。
387 0
「48小时极速反馈」阿里云实时计算Flink广招天下英雄