Flink技术实战
文章平均质量分 75
在数据洪流席卷的时代,实时计算能力已成为企业核心竞争力的关键。本专栏以Apache Flink为核心,深度剖析流处理领域的核心技术框架,助你从理论到实战全面掌握实时计算的精髓。
无论你是希望提升技术深度的开发者,还是需要构建实时数据管道的架构师,本专栏都将为你提供从理论到实战的完整知识体系。
人工智能_AI
没有梦想和神经网络有什么区别?
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Flink:连接流Connect的介绍以及处理函数之CoProcessFunction
在前面的课程中,我们学习了union联合流,但是方式必须要保证N个流都必须类型一致,如果类型不一致怎么办?本文我们来学习connect连接流,它可以实现不同类型流的连接。原创 2025-12-30 23:33:57 · 202 阅读 · 0 评论 -
Flink:将N个流合并为一个流之联合流
我们前面学习了基于侧输出流来实现分流,有分就有合,那么如何才能将N个流合并位一个流呢?原创 2025-12-26 22:25:10 · 110 阅读 · 0 评论 -
flink框架:处理函数之侧输出流实现分流
我们可以通过处理函数来在“主流”上分叉出的“支流”,也就是侧输出流,而侧输出流还可以和主流类型不一样。原创 2025-12-25 23:07:29 · 62 阅读 · 0 评论 -
Flink:处理函数之窗口处理函数ProcessWindowFunction
前面的课程中我们学习了KeyedProcessFunction,本文我们将学习另外一种类型的处理函数----基于窗口的处理函数ProcessWindowFunction。原创 2025-12-23 22:48:28 · 189 阅读 · 0 评论 -
flink处理函数之KeyedProcessFunction
在前面的课程中我们学习了最基本的ProcessFunction,本文我们学习最重要的KeyedProcessFunction。原创 2025-12-19 22:44:21 · 204 阅读 · 0 评论 -
ProcessFunction 最基本的处理函数
ProcessFunction是一个继承AbstractRichFunction的抽象类。ProcessFunction有两个泛型类型,如上所示,分别是I和O,其中I表示输入类型,O表示输出类型,这意味着输入类型经过处理函数得到输出类型,输入类型和输入类型是可以不一致的。ProcessFunction抽象类有两个方法,分别是:onTimer()原创 2025-12-18 20:41:24 · 61 阅读 · 0 评论 -
处理函数(ProcessFunction)
在前面的课程中我们学习了基于DataStream的各种操作,比如聚合、转换、窗口等等,我们可以利用flink定义的各种算子来完成各种不同的任务。在DataStream的下一层就是基本处理函数(ProcessFunction),在这一层没有了算子的概念,我们可以在这一层接触到很多底层的逻辑,可以脱离FLink为我们设置的算子框架,为所欲为,本文对此进行学习。原创 2025-12-14 13:10:10 · 44 阅读 · 0 评论 -
窗口相关操作的总结
窗口类型从窗口的驱动类型角度看,窗口可以分为时间窗口和计数窗口从窗口的按照分配数据的规则来看,窗口可以分为滚动窗口和滑动窗口和会话窗口和全局窗口将二者结合起来,我们可以得到滚动事件窗口、滚动计数窗口、滑动事件窗口、滑动计数窗口、会话时间窗口、全局窗口(需要依赖触发器)窗口的类型和基本信息由窗口分配器指定,窗口不会预先创建好,当第一个应该属于这个窗口的数据元素到达时,才会创建对应的窗口。是否分区。原创 2025-12-13 21:20:41 · 40 阅读 · 0 评论 -
Flink对于迟到数据的处理
Flink作为一个流式处理框架,最重要的就是要处理好迟到的数据,保证数据的准确性,本文就来系统学习一下FLink框架针对于迟到数据的处理。原创 2025-12-09 22:34:01 · 114 阅读 · 0 评论 -
flink 移除器(Evictor):定义移除某些数据的逻辑
移除器主要用来定义移除某些数据的逻辑。基于 WindowedStream 调用.evictor()方法,就 可以传入一个自定义的移除器(Evictor),来实现移除数据的目的。原创 2025-12-05 22:10:07 · 151 阅读 · 0 评论 -
触发器(Trigger):灵活控制窗口行为
触发器主要是用来控制窗口什么时候触发计算,也就是什么时候执行窗口函数(但是不会控制窗口的关闭)。在Flink中,有三种类型的触发器:1. 时间触发器(time triggers):基于时间的触发器,根据时间间隔或时间戳来触发操作执行。2. 计数触发器(count triggers):基于记录数量的触发器,根据记录数量来触发操作执行。3. 自定义触发器(custom triggers):用户可以根据自己的需求定义自己的触发器逻辑。原创 2025-11-01 22:11:06 · 120 阅读 · 0 评论 -
增量聚合和全窗口函数的结合
如果两个同时使用,流中每来一个数据事件都会在增量聚合函数中进行一次聚合,当窗口关闭的时候,则会调用全窗口函数进行处理,此时全窗口函数就不会再缓存所有数据了,而是直接将增量聚合函数的结果当作了Iterable 类型的输入,由于结果只有一个,所以Iterable 类型的输入中就只有一个元素。全窗口函数处理会比较慢,增量聚合函数处理计算会更高效,但是全窗口函数可以获取到上下文从而获取到更多的信息,所以可以将二者结合起来。原创 2025-10-12 13:00:01 · 61 阅读 · 0 评论 -
窗口函数之全窗口函数
在前面课程中我们学习了如何通过Flink来定义窗口,窗口定义完毕之后,一旦达到窗口关闭的条件,就会触发窗口计算了,此时就需要执行窗口函数了。本文我们学习窗口函数的其中一种类型——全窗口函数。原创 2025-10-11 20:42:26 · 67 阅读 · 0 评论 -
FLink:窗口分配器(Window Assigners)指定窗口的类型
在前面课程中我们学习了各种各样的窗口类型,本文我们来看一下如何在FLink中应用这些窗口,在FLink中通过窗口分配器完成这个工作,窗口分配器其实就是在指定窗口的类型。原创 2025-09-20 23:21:17 · 397 阅读 · 0 评论 -
按键分区和非按键分区对窗口计算的影响
如果我们要开启窗口计算,需要确定数据流是否按键分区,因为是否对数据流进行按键分区对窗口的计算是存在不同程度的影响的。原创 2025-09-17 23:42:00 · 58 阅读 · 0 评论 -
Flink框架中的窗口类别:时间窗口、计数窗口
在flink中窗口是有很多种类型的,不同类型窗口可以解决不同的问题,本文我们将对此进行系统的学习,从而掌握Flink中所有的窗口类型。原创 2025-09-16 23:30:33 · 194 阅读 · 0 评论 -
一文搞懂Flink的水位线生成策略
我们现在应该已经知道了如何生成有序水位线和乱序水位线了,如果我们想要自定义水位线该如何操作呢?我们只需要自定义一个类,然后实现WatermarkStrategy接口,并且重写createTimestampAssigner方法和createWatermarkGenerator方法。其中createTimestampAssigner方法用于定义时间戳分配器,然后createWatermarkGenerator用于定义水位线生成策略周期性水位线生成器@Override@Override。原创 2025-09-08 23:03:41 · 70 阅读 · 0 评论 -
FLINK:水位线的介绍
在前面的一节课程中我们学习了时间语义,其中有一个关键问题:分布式的Flink如何保证时间的统一?系统时间肯定是无法保证的,一定会有偏差,此时Flink引入了水位线的概念,水位线类似于一个逻辑时间,它依赖流中数据的事件事件来推动,从而保证分布式中每个节点都可以保证事件的统一,本文对此进行学习。原创 2025-09-07 14:24:07 · 396 阅读 · 0 评论 -
Flink中的事件时间、处理时间和摄入时间
今后的Flink课程中,标识一个数据的时间就是事件时间,就是这个数据产生的时间,无论经过什么样的传输,它的时间永远不会变化。原创 2025-09-06 13:03:32 · 152 阅读 · 0 评论 -
flink中的窗口的介绍
现在有一个温度传感器,它不定时上报当前环境的温度。我们现在有一个任务就是每10分钟统计一次当前环境的温度(平均值)1分钟 462分钟 483分钟 457分钟 459分钟 4610分钟 4311分钟 4212分钟 4917分钟 4921分钟 4925分钟 4329分钟 45如果我们将它画出来,我们可以得到下面的图像:如上所示,定义了一个10分钟的时间窗口,每10分钟统计一次数据,从0分钟开始收集数据,到10分钟的时候,收集到了1,2,3,7,9这五个数据,此时窗口内的平均值为46。原创 2025-09-02 22:51:19 · 164 阅读 · 0 评论 -
一文搞懂FLink框架中的算子
Flink 是流式计算框架。我们编写Flink代码,其实就是定义了一连串的处理操作,我们定义每一个处理转换操作都叫作 “算子”(Operator),所以我们的程序可以看作是一串算子构成的管道,数据则像水流一样有序地流过,每流过一处,算子就要对数据进行一次处理,不同算子的功能是不同的。算子是数据流应用程序计算的基本单元,可以通过消费输入的数据进行一系列逻辑计算。比如我们之前学习的对文本文件中词频统计的flink程序,基于执行环境调用的socketTextStream()方法,就是一个读取文本流的输入算子。原创 2025-08-31 23:18:01 · 297 阅读 · 0 评论 -
逻辑流图、作业图、执行图、物理图
逻辑流图是用户编写的程序的抽象表示,作业图是逻辑流图经过优化和转换后的中间表示,执行图是作业图经过调度器分配资源后的最终表示,物理图是执行图经过资源分配和优化后的最终表示。这些图之间的转换和关系是Flink框架中实现流式计算的重要步骤。原创 2025-08-26 22:35:06 · 97 阅读 · 0 评论 -
控制并行处理任务的数量和资源分配:任务槽(Task Slots)
Flink任务运行在TaskManager中,每个TaskManager都是一个JVM进程,可以运行多个子任务,为了控制一个TaskManager可以运行的子任务的数量,就引入了任务槽的概念。任务槽是运行子任务的基本单位,它是一个可以执行任务的资源容器。每个任务槽在同一个时刻只能运行一个子任务,任务槽的数量决定了Flink应用程序的并行度,即可以同时处理的任务数量。我们可以把一个slot看成是一个线程。原创 2025-08-24 13:35:18 · 320 阅读 · 0 评论 -
Flink框架:算子链的介绍
在Flink中,算子链(Operator Chain)是一种优化技术,用于将多个算子连接在一起形成一个链式结构,以减少数据序列化和网络传输开销,提高整体的处理性能。原创 2025-08-23 11:43:22 · 198 阅读 · 0 评论 -
一文搞懂FLink中算子的并行度
一个算子的子任务(subtask)的个数被称之为其并行度(parallelism)。它是一个重要的概念,对于优化作业的性能和资源利用非常关键,本文对此进行学习。原创 2025-08-21 23:11:35 · 126 阅读 · 0 评论 -
Flink作业执行的第一步:DataFlow graph的构建
通过DataFlow graph,可以清晰地了解Flink程序的数据流动和处理逻辑,可以方便地进行性能优化和调整,以提高程序的性能和吞吐量。。同时,DataFlow graph也是Flink作业在Flink集群上执行的基础,Flink会根据DataFlow graph来进行任务的划分和调度,将任务分配给不同的TaskManager进行执行。原创 2025-08-17 14:07:17 · 137 阅读 · 0 评论 -
Flink程序关键一步:触发环境执行
在前面的课程中,我们学习了很多的flink流程序,在这些流程序中都有一个共同的特点,就是在代码的最后一行都有一个env.execute();,它的作用是什么呢?原创 2025-08-03 23:15:22 · 147 阅读 · 0 评论 -
一文搞懂Flink框架中的输出算子Sink
如果Flink没有为我们提供了一些数据源的Sink,那么我们可以通过自定义的方法来完成。Flink为我们提供了SinkFunction接口和对应的RichSinkFunction抽象类,只要实现它们,就可以实现任何我们想要数据源Sink了。在实现SinkFunction 的时候,需要重写的一个关键方法invoke(),该方法的内容就是将流里的数据发送出去的逻辑。自定义influxdb输出sink。原创 2025-08-02 21:24:20 · 513 阅读 · 0 评论 -
Flink富函数:一种更灵活、可扩展的方式来定义数据流的处理逻辑
Flink中的富函数类是一组用于处理数据流的函数接口和实现类。富函数类提供了一种更灵活和可扩展的方式来定义数据流的处理逻辑。原创 2025-08-01 00:08:36 · 502 阅读 · 0 评论 -
一文搞懂FLink流框架中的聚合算子
在前面的课程中,我们学习了分区的概念,数据分区完成中,我们就可以进行数据聚合了,本文我们将学习FLink中的聚合算子。原创 2025-07-28 23:51:43 · 303 阅读 · 0 评论 -
Flink是如何实现物理分区?
FLink为我们提供了自定义的方式来完成分区,可以调用partitionCustom(Partitioner,KeySelector)来实现。第一个参数是自定义分区器(Partitioner)对象确定分区方式,第二个参数是指定分区器的字段(用法和keyby一样)// 创建一个包含两个字段的DataStream// 使用partitionCustom进行自定义分区// 自定义分区器@Override// 将奇数分配到分区0,偶数分配到分区1@Override。原创 2025-07-26 12:17:46 · 290 阅读 · 0 评论 -
Flink框架:keyBy实现按键逻辑分区
keyBy是一种按照键的哈希值来进行重新分区的操作。keyby分区操作只能保证把数据按key“分开”,但无法控制每个key 的数据具体会分到哪一区去,所以keyBy 是一种逻辑分区操作,后面我们会学习物理分区操作。原创 2025-07-21 23:48:53 · 245 阅读 · 0 评论 -
一文快速搞懂FLink框架中的转换算子
在前面的课程中,我们学习了源算子,本文我们将学习转换算子,转换算子接收一个或多个DataStream,然后将输出一个新的DataStream。本文中的转换算子接收一个DataStream,然后输出一个新的DataStream,至于接收多个DataStream,将在之后的文章中进行介绍。一个Flink程序的核心,其实就是所有的转换操作,它们决定了处理的业务逻辑。本文对基础的转换算子进行介绍。原创 2025-07-20 23:13:57 · 481 阅读 · 0 评论 -
基于Socket来构建无界数据流并通过Flink框架进行处理
随着大数据技术的不断发展,实时数据流处理已成为企业应对海量数据、实现快速决策的关键技术。Apache Flink是一个开源的流处理框架,它能够对无界数据流进行高效的、精确的处理。本文将介绍如何通过Socket构建无界数据流,并利用Flink框架进行无界流处理。原创 2025-07-19 12:43:00 · 208 阅读 · 0 评论 -
一文搞懂FLINK框架支持的所有源算子(包含代码实现)
/用于实现org.apache.kafka.common.serialization.Deserializer接口的的反序列化器类//自动将偏移重置为最新的偏移量.build();//用于实现org.apache.kafka.common.serialization.Deserializer接口的的反序列化器类//自动将偏移重置为最新的偏移量.build();原创 2025-07-17 23:46:56 · 293 阅读 · 0 评论 -
一文快速搞懂分布式框架FLink支持的数据类型
Flink框架是一个分布式框架,Flink 的分布在不同节点上的 Task 的数据传输必须经过序列化/反序列化,因此序列化/反序列化也是影响 Flink 性能的一个重要因素。Flink利用类型信息的概念来表示数据类型,并且对于每种类型,都会为其生成特定的序列化器,反序列化器以及比较器。本文就对Flink中的类型进行详细的介绍。原创 2025-07-16 23:45:04 · 158 阅读 · 0 评论 -
第一个Flink 程序 WordCount,词频统计(批处理)
本文将通过一个统计词频的小程序来看一下flink是如何对数据进行批处理的,需要声明的是,一般我们使用Flink常常用于流式处理,即使是有界的数据,我们也将其看成是无界数据进行流式处理,所以批量处理并不是很常用,这里只是为了了解一下Flink是如何进行批处理的。原创 2025-07-13 22:03:14 · 159 阅读 · 0 评论 -
Flink创建执行环境的三种方式,也是Flink搭建程序的第一步
一般而言,我们建议在FLINK中不要使用批模式,即使FLINK支持批模式。因为我们也可以将有界数据看成是无界数据,使用FLINK的流模式进行数据处理。获取到程序执行环境后,我们还可以对执行环境进行灵活的设置。比如可以全局设置程序的并行度、禁用算子链、定义程序的时间语义、配置容错机制等,后续我们将一一进行介绍。原创 2025-07-12 15:06:09 · 242 阅读 · 0 评论 -
第一个Flink 程序:词频统计 WordCount(流处理)
本文将通过一个统计词频的小程序来看一下flink是如何对数据进行批处理的,需要声明的是,一般我们使用Flink常常用于流式处理,即使是有界的数据,我们也将其看成是无界数据进行流式处理,所以批量处理并不是很常用,这里只是为了了解一下Flink是如何进行批处理的。原创 2025-07-06 22:09:38 · 264 阅读 · 0 评论 -
快速搞懂FLink框架中最基本数据源DataStream
DataStream API包含的内容很多,但基础可以由四部分组成,分别为:执行环境、数据源(source)、转换操作(transformation)、输出(sink)接下来我们将对这四部分进行介绍,学会这四部分,相信大家对DataStream API的理解就基本OK了。原创 2025-07-05 12:33:48 · 70 阅读 · 0 评论
分享