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

本文涉及的产品
实时计算 Flink 版,5000CU*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轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
10天前
|
SQL 搜索推荐 OLAP
Flink 流批一体场景应用及落地情况
本文由阿里云 Flink 团队苏轩楠老师撰写,旨在介绍 Flink 流批一体在几个常见场景下的应用。
67245 1
Flink 流批一体场景应用及落地情况
|
7天前
|
SQL Kubernetes 数据处理
实时计算 Flink版产品使用问题之在 flink-conf.yaml 中定义的配置在某些情况下未被正确应用到 K8s 上运行的任务管理器(JobManager)和任务管理节点(TaskManager),是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
运维 监控 Java
面经:Storm实时计算框架原理与应用场景
【4月更文挑战第11天】本文是关于Apache Storm实时流处理框架的面试攻略和核心原理解析。文章分享了面试常见主题,包括Storm的架构与核心概念(如Spout、Bolt、Topology、Tuple和Ack机制),编程模型与API,部署与运维,以及应用场景与最佳实践。通过代码示例展示了如何构建一个简单的WordCountTopology,强调理解和运用Storm的关键知识点对于面试和实际工作的重要性。
72 4
面经:Storm实时计算框架原理与应用场景
|
1月前
|
SQL 运维 DataWorks
Flink CDC在阿里云DataWorks数据集成应用实践
本文整理自阿里云 DataWorks 数据集成团队的高级技术专家 王明亚(云时)老师在 Flink Forward Asia 2023 中数据集成专场的分享。
1198 2
Flink CDC在阿里云DataWorks数据集成应用实践
|
1月前
|
存储 NoSQL 分布式数据库
【Flink】Flink分布式快照的原理是什么?
【4月更文挑战第21天】【Flink】Flink分布式快照的原理是什么?
|
1月前
|
SQL Prometheus Kubernetes
实时计算 Flink版产品使用合集之时间戳读取的原理是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
297 0
|
6天前
|
消息中间件 Java 关系型数据库
实时计算 Flink版操作报错合集之从 PostgreSQL 读取数据并写入 Kafka 时,遇到 "initial slot snapshot too large" 的错误,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
560 0
|
6天前
|
存储 SQL 关系型数据库
实时计算 Flink版操作报错合集之按时间恢复时,报错:在尝试读取binlog时发现所需的binlog位置不再可用,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
492 0
|
6天前
|
消息中间件 资源调度 Java
实时计算 Flink版操作报错合集之遇到了缺少包的错误,已经添加了相应的 jar 包,仍然出现同样的报错,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
531 2