- 博客(200)
- 资源 (3)
- 收藏
- 关注
原创 Flink 系列之二十八- Flink SQL - 水位线和窗口
本章主要讲解了FlinkSQL中如何定义水位线和窗口,同时还比较了FlinkSQL与Data Stream API中的一些区别。下一章讲会将结合上一章的Top-N和Deduplication讲一下在窗口模式下的语法。
2025-06-12 18:02:24
1043
原创 Flink 系列之二十七 - Flink SQL - 中间算子:OVER聚合
可以将over函数的内容定义在select外部,这样可以重复利用over函数将第2)步的。
2025-06-11 17:27:22
611
原创 Flink 系列之二十六 - Flink SQL - 中间算子:普通聚合
本章先讲解group by的功能,再基于group by的简单聚合函数进行演示说明。接下来一章还是讲聚合函数。但是是FlinkSQL特有的一个OVER函数,也成为“开窗函数”,虽然还没有讲到FlinkSQL如何设置窗口,但是OVER函数并不会与窗口冲突,它更像是SQL特有的窗口语法。
2025-06-11 17:26:40
665
原创 Flink 系列之二十五 - Flink SQL - 源算子&输出算子
本章将源算子和输出算子放在一起讲,是因为之前在Data Stream API 已经学习过,写入和写出都是有共性,因此放在一起讲。接下来会讲解中间算子。
2025-06-10 09:32:15
1099
原创 Flink 系列之二十四 - Flink SQL - 基础操作
本章通过基础的建库建表、执行环境配置以及显示模式演示,这些都是为了后面做基础,接下来就按照Data Stream API 方式来讲解在SQL API中如何实现对应功能。
2025-06-10 09:31:40
965
原创 Flink 系列之二十三 - Flink SQL - 开篇
本章通过简单入门示例进入FlinkSQL的使用方式,并通过讨论动态表、连续查询等概念,理清楚流和表之间的转换。这样为后面学习FlinkSQL的内容较为容易上手。从前面知道FlinkSQL其实是Flink提供的一种编写的模式,所以它与Data Stream API的内容都会差不多。因此接下来几章,尽量与之前的Data Stream API的内容做匹配讲解,这样既能回顾一下Data Stream API的内容,也对FlinkSQL的理解更容易一些。
2025-06-09 09:08:57
776
原创 Flink 系列之二十二 - 高级概念 - 保存点
之前做过数据平台,对于实时数据采集,使用了Flink。现在想想,在数据开发平台中,Flink的身影几乎无处不在,由于之前是边用边学,总体有点混乱,借此空隙,整理一下Flink的内容,算是一个知识积累,同时也分享给大家。。
2025-06-09 09:05:29
772
原创 Flink 系列之二十一 - 高级概念 - 检查点
本章对Flink的检查点功能做了全面的了解,当然还没有演示如何从某个检查点恢复任务。这个在下一章讲。下一章将讲解保存点相关内容(这个保存点在前面也是反复提及的),同时也演示如何通过检查点或者保存点恢复任务。
2025-05-15 08:32:33
768
原创 Flink 系列之二十 - 高级概念 - 状态管理
之前做过数据平台,对于实时数据采集,使用了Flink。现在想想,在数据开发平台中,Flink的身影几乎无处不在,由于之前是边用边学,总体有点混乱,借此空隙,整理一下Flink的内容,算是一个知识积累,同时也分享给大家。在《系列之一 - 开篇》中说过,Flink是一个支持有状态的流处理。这一章就来讲一下Flink的状态管理当用户在计算过程中可能需要存储一些中间状态时,比如在《系列之十 - Data Stream API的中间算子:合流和分流》中的1.2.3 模拟关联表的示例中使用过自己定义中间map存储流的数
2025-05-15 08:32:08
1130
原创 Flink 系列之十九 - 高级概念 - 定时器
前面在《系列之十一 - Data Stream API的中间算子的底层原理及其自定义》中可知,如果要自定义算子操作,就是要自定义process函数,前文中讲到自定义process函数包括了8大类。但是并非所有都支持自定义定时器,其中只有ProcessFunction、CoProcessFunction、KeyedProcessFunction、KeyedBroadcastProcessFunction这四个支持定时器。
2025-05-13 14:40:45
713
原创 Flink 系列之十八 - 高级概念 - 水位线传递和策略
从上面3种策略,都是为了让Flink计算最终达到正确性,但这时候有人就会提出来为什么要设置3种策略,真实业务场景中如何设置这些策略的时间?下面给出一些总结和实践:1)水位线延迟时间:这个数据决定第一次计算的时间,如果该时间变长的话,那么意味着你要得到的结果会有延迟;但如果设置过短可能导致数据计算不正确(漏掉一些数据)。所以这个时间在结果的时效性和正确性之间有矛盾。因此如果你希望计算结果时效性,那么一般都是设置很低的秒级和毫秒级,甚至为0。
2025-05-13 14:40:24
725
原创 Flink 系列之十七 - 高级概念 - 事件时间和水位线
前面已经了解了水位线的生成器,那么接下来通过示例自定义水位线生成器。示例说明:看到BoundedOutOfOrdernessWatermarks是通过onPeriodicEmit定时(200ms)发送水位线,这个自定义的水位线生成器改成在onEvent中发送水位线,这样就形成每来一条数据就生成一次水位线/*** 自定义水位线演示求cpu平均值*/// 1. 创建执行环境// 为了展现方便先设置为1,后续降到多并行度的watermark再开启多并行度。
2025-05-12 14:09:55
884
原创 Flink 系列之十六 - 高级概念 - 窗口底层原理
本章对窗口的底层相关的类都做了一定的了解,这样有利于掌握窗口这个概念。窗口是Flink非常重要的概念,也是其实现很多业务计算,特别是流式计算的关键逻辑。接下来还会继续讲Flink的另外一个高级概念-水位线。
2025-05-12 14:09:24
1009
原创 Flink 系列之十五 - 高级概念 - 窗口
根据《官方文档窗口是Flink处理无界流的核心。窗口将流分成有限大小的“桶”,可以对桶内的数据进行定制化的计算。这么说可能会比较难理解,下面通过图解来说明一下窗口管道里的数据不断的流过来,Flink会根据规则生成一个桶来接住这些数据,桶的生成规则如下:1)基于时间规则:一定范围时间内的数据放到一个桶2)基于计数规则:一定数量的数据放到一个桶当一开始没有任何数据过来时,Flink是不会生成桶的,而是第一条数据过来才会生成一个桶。也就是事件触发类型的。
2025-05-11 10:43:12
1019
原创 Flink 系列之十四 - Data Stream API的自定义数据类型
在使用Flink过程中,与数据类型相关的无非就是以下三种场景,这里一一使用demo演示代码参考:lesson071)新建子模块lesson07,其pom引入如下:</</</</Flink基本上能满足用户99.9%的需求,但如果Flink实现的序列化还不满足要求,用户可以自定义TypeInformation。1)需要实现TypeInformation,并实现其方法2)需要实现TypeSerializer,用于实现序列化这里暂时没有想到一个实际场景,就不演示自定义TypeInformation。
2025-05-11 10:42:43
799
原创 Flink 系列之十三 - Data Stream API的输出算子底层原理
了解了基本的原理,这里通过一个简单的案例来自定义一个Sink示例说明:将上游算子来的String数据,写入到minIO对象存储中。前提是已经部署一个minIO服务器,并创建flink-data桶代码参考:lesson06子模块1)在flink-study父项目中的pom引入minio的dependencyManagement版本管理-- 版本是8.5.2--> < version > ${minio.version} </ version > </ dependency >
2025-05-10 10:28:07
1033
原创 Flink 系列之十二 - Data Stream API的输出算子
输出算子:顾名思义就是将数据流输出到外部的存储。跟输入算子一样,输出算子同样包括文件、kafka、数据库等等,包括之前一直在使用的print算子,其实它也是一个输出算子。这一部分Flink也是将其独立到Connector模块提供很好的规范和扩展性,其中Flink内置很多源算子,也支持扩展自定义的源算子。这里通过《Flink官方网站文档》可以实时看到已经支持哪些输出算子。下图为官方截图,到目前为止支持的输出算子,其中有sink字样的就是支持该外部系统输出:除了上面的Flink本身支持的算子之外,还可以在。
2025-05-10 10:27:42
967
原创 Flink 系列之十一 - Data Stream API的中间算子的底层原理及其自定义
看到在RichFunction下面除了原先Map、Fliter等类之外,还有许多ProcessXXXFunction或许XXXProcessFunction的实现抽象类,这些就是Flink为用户提供的自定义算子的抽象类。如果要自定义自己的算子,就可以通过实现这些抽象类来自定义,这些类根据不同流中使用不同Function。从其不同流的使用来看,可以总结出以下8大类调用的流说明实现方法DataStream这是普通DataStream流最基本的处理函数,使用process方法传入。
2025-05-09 09:25:28
654
原创 Flink 系列之十 - Data Stream API的中间算子:合流和分流
这一章学了Flink中间算子中的合流和分流的方法,至此算是将Flink中间算子的大部分常用的方法学了一遍,接下来一章将会是对其底层的实现原理以及自定义中间算子的操作进行讲解。
2025-05-09 09:24:52
992
原创 Flink 系列之九 - Data Stream API的中间算子:分区
当Flink提供以上几种分区的算子都无法满足用户的需求,这个时候可以通过自定义分区算子。在演示自定义之前,先来看看分区算子的底层原理。既然已经知道要使用partitionCustom,并实现和两个接口,那么接下来就能自己实现一个自定义demo。示例描述:假设是一个监听来自服务器cpu的日志,日志格式是“服务器id,cpu,时间”,按照服务器id的hash值作为key,去分配到下游算子/**
2025-05-07 08:54:34
1143
原创 Flink 系列之八 - Data Stream API的中间算子:转换和聚合
前面的聚合类算子都是Flink自身实现好的功能,如果min、max、sum方法都不满足用户要求,用户也可以重新实现符合自己聚合要求的算子,自定义聚合类算子,需要使用:reduce。其实去看min、max、sum、minBy和maxBy都是底层实现,都是使用reduce方法实现的。描述定义Reduce函数的基本接口。Reduce函数通过总是取两个元素并将它们合并为一个元素,将元素组组合为一个值。Reduce函数可以用于整个数据集,也可以用于分组数据集。
2025-05-07 08:54:12
1023
原创 Flink 系列之七 - Data Stream API的源算子原理
接下来,使用一个简单示例,来演示如何自定义Source算子。在日常工作中,读取服务器日志并汇总到一个可视化平台供监控和分析是一个非常常见的场景。在这里假设一个场景:有一个服务器,在固定的目录下面会按照日期不断生成日志,假设每个5分钟生成一个日志文件,由于日志是不断产生,因此常见写日志的方法是正在写的日志都会是以tmp为后缀文件,写完的日志才会被命名为log为后缀。
2025-04-25 14:56:59
928
原创 Flink 系列之六 - Data Stream API的源算子
本章主要讲解Flink的源算子,并对其一些常见的源算子进行的演示。Flink框架有很好的扩展性,对于源算子,当然提供了用户自定义的方式,下一章,将讲解源算子原理,并通过一个自定义源算子案例来解剖Flink的源算子原理。
2025-04-25 14:56:13
1029
原创 Flink 系列之五 - Data Stream API的执行环境
通过本章,对Data Stream API这一层API的使用步骤做了一次了解,并在讲述了执行环境相关内容,接下来将继续讲解Data Stream API的源算子、中间算子、输出算子以及执行函数相关内容。
2025-04-24 14:30:42
724
原创 Flink 系列之四 - 核心概念
本章针对Flink的核心概念做了一次全面的讲解,这一章对理解后面很多内容或者在实践中都非常重要,大家一定要理解好这些概念。接下来就进入Flink具体的相关API详细内容。
2025-04-24 14:30:07
626
原创 Flink 系列之三 - 集群模式
本章了解了Flink集群的部署方式以及其不同资源提供方式下的运行方式,同时通过剖解作业提交的整个流程,了解Flink集群不同组件的所负责的工作。至此,对Flink已经有了一个很全面的了解。接下来,将通过多方面细节探讨,更深入的了解Flink。
2025-04-23 14:17:51
613
原创 Flink 系列之二 - 集群和部署
本章我们通过Standalone方式部署了一个Flink集群,并通过2种不同方式进行提交任务。这样你就基本了解Flink在正式环境中是如何运行的。但是这些只是简单的皮毛,我们下一章通过了解部署模式、资源提供方式和提交底层原理,来更细致了解Flink的集群及原理。
2025-04-23 14:17:15
1024
原创 Flink 系列之一 - 开篇
本章让大家从了解Flink的一些简单概念,到使用3个简单代码示例,最后通过代码的方式验证流处理和批处理,以及无界流和有界流的区别。这算是初步了解了Flink,虽然里面有很多代码可能看不懂,但是接下来的章节将会一一为你剖析。
2025-04-22 13:57:20
1036
原创 基于Spring Security 6的OAuth2 系列之二十六 - 终章
至此,我们对Spring Security 6实现OAuth2的内容就介绍完了,当然还有很多内容没有介绍,不过相信通过这一系列,你应该已经掌握了底层原理了,自己就可以去看其它的功能。
2025-04-22 13:56:22
1490
原创 基于Spring Security 6的OAuth2 系列之二十五 -响应式编程之二
本章我们介绍了响应式编程实现资源服务器的搭建方式。至此,我们对Spring Security 6 实现OAuth2的全部内容就已经讲完了,下面还有最后一章,将以一个实际项目来结束。
2025-02-27 14:33:10
785
原创 基于Spring Security 6的OAuth2 系列之二十四 -响应式编程之一
响应式编程是一种编程范式,它允许程序组件以声明式的方式响应数据的变化。这种编程方式使得开发者能够更容易地构建复杂的异步数据流和事件驱动的应用程序。可能这么说对于理解这个很难,下面我通过一个示例,让你感受一下什么是响应式编程。如果你使用过java的Lambda编程方式,对于理解响应式编程就更容易一点。下面2段代码实现一样的效果,一个是使用java的Lambda表达式,一个是使用Project Reactor响应式编程框架,你先体会一下其编程风格,其实和java的Lambda表达式一样。
2025-02-26 16:21:07
719
原创 基于Spring Security 6的OAuth2 系列之二十三 - 高级特性--TLS客户端认证方法之二
本章我们介绍了如何使用证书对授权服务器的客户端进行认证。下一章,我们讲一种新的编程范式:响应式编程。在Spring Security中也采用了这种编程范式重新实现了一遍其框架,因此了解这一部分也很重要。
2025-02-26 16:20:28
962
原创 基于Spring Security 6的OAuth2 系列之二十二 - 高级特性--TLS客户端认证方法之一
到这里,我们已经通过Spring Security做了一次证书双向认证的过程。有了这一章为基础,那么对于OAuth2的授权服务器,其TLS客户端认证方式也是类似,下一章我们讲一下。
2025-02-25 15:53:45
1060
原创 基于Spring Security 6的OAuth2 系列之二十一 - 高级特性--自定义授权模式
本次场景,我们来模拟自定义通过手机短信方式进行授权。代码参考lesson15子模块,这里只是模拟,我们假如已有手机号码:13888888888。并接收到的验证码:9999我们在上一章的《系列之二十 - 高级特性–令牌交换(Token Exchange)》或者前面的《系列之十七 - 高级特性–设备授权码模式》中的底层源码解析就已经知道,它们都可以认为是一种新的授权码模式,因此重写一种授权方式必须实现和,当然,你还要定义自己的。
2025-02-25 15:52:30
1103
原创 基于Spring Security 6的OAuth2 系列之二十 - 高级特性--令牌交换(Token Exchange)
令牌交换(Token Exchange)来自于RFC8693协议。OAuth 2.0 Token Exchange 是标准 OAuth 2.0 协议的扩展。它使客户端应用程序能够从充当安全令牌服务(Security Token ServiceSTS) 的授权服务器请求和获取安全令牌(例如访问令牌)。STS 是一项服务,负责验证提供给它的令牌并在响应中颁发新令牌,这使客户端应用程序能够为分布式环境中的资源获取适当的安全令牌。
2025-02-20 09:11:58
1005
原创 基于Spring Security 6的OAuth2 系列之十九 - 高级特性--OIDC1.0协议之二
我们发现在访问/userinfo接口时,只返回一个用户名,如果我们想返回更多的信息,应该如何操作呢?现在我们知道其通过id_token里面的信息取获取的。第一种方法:自定义id_token,将信息放入id_token中,我们需要自定义OAuth2TokenGenerator。或许你存一些无关紧要的信息还是可以接受的,但是如果信息中包括个人隐私以及系统权限等信息,就会使得id_token暴露太多信息。如果想实现这个,参考官方的案例。
2025-02-18 16:53:36
1020
原创 基于Spring Security 6的OAuth2 系列之十八 - 高级特性--OIDC1.0协议之一
本章简介了OIDC1.0协议,并使用Spring Security演示了一遍OIDC1.0协议的实现。下章我们将去窥探其原理。
2025-02-18 16:53:05
1234
原创 基于Spring Security 6的OAuth2 系列之十七 - 高级特性--设备授权码模式
本章我们对设备授权码模式进行了详细的讲解。下一章我们继续讲解OAuth2的新特性。
2025-02-17 09:19:44
1191
原创 基于Spring Security 6的OAuth2 系列之十六 - 高级特性--PKCE
本章我们了解了none情况下的认证模式,可以通过PKCE进行增强。其实PKCE不止是none认证方式,所有认证方式下都可以加入PKCE,但是PKCE只能用于授权码模式,不能用于客户端模式。下一章,我们将继续OAuth2.1未讲解的一个关键更新:设备授权码模式。
2025-02-17 09:18:28
1362
6
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人