非对齐检查点算法
摘要:在Flink的检查点机制中,屏障(barrier)是划分快照(状态)的边界。在启用exactly once语义的条件下,当一个算子有多个输入流时,需要等待所有输入流中当前检查点N的屏障都到达其输入缓冲区,才能安全地触发检查点,否则检查点N的快照数据和检查点N + 1的快照数据就会混在一起。 屏障对齐
阅读全文
posted @
2024-05-23 17:21
溪水静幽
阅读(16)
推荐(0) 编辑
FlinkSQL之窗口
摘要:从 1.13 版本开始,Flink 开始使用窗口表值函数(Windowing table-valued functions, Windowing TVFs)来定义窗口。窗口表值函数是 Flink 定义的多态表函数(PTF),可以将表进行扩展后返回。表函数(table function)可以看作是返回
阅读全文
posted @
2023-06-11 07:45
溪水静幽
阅读(81)
推荐(0) 编辑
时间属性
摘要:基于时间的操作(比如时间窗口),需要定义相关的时间语义和时间数据来源的信息。在 Table API 和 SQL 中,会给表单独提供一个逻辑上的时间字段,专门用来在表处理程序中指示时间。 时间属性(time attributes),其实就是每个表模式结构(schema)的一部分。它可以在创建表的DDL
阅读全文
posted @
2023-06-11 07:25
溪水静幽
阅读(183)
推荐(0) 编辑
动态表转换成流
摘要:更新(Update)查询 在代码中定义一个 SQL 查询 Table urlCountTable = tableEnv.sqlQuery(“SELECT user, COUNT(url) as cnt FROM EventTable GROUP BY user”); 主要是分组聚合统计每个用户的点击
阅读全文
posted @
2023-06-10 17:23
溪水静幽
阅读(28)
推荐(0) 编辑
流转换成动态表
摘要:当流中有新数据到来,初始的表中会插入一行;而基于这个表定义的 SQL 查询,就应该在之前的基础上更新结果。这样得到的表就会不断地动态变化,被称为"动态表"(Dynamic Tables)。动态表是Flink 在Table API 和SQL 中的核心概念,它为流数据处理提供了表和SQL 支持。我们所熟
阅读全文
posted @
2023-06-10 07:33
溪水静幽
阅读(49)
推荐(0) 编辑
Flink sql 基本api操作二
摘要:一、将表(Table)转换成流(DataStream) 1. 调用 toDataStream()方法 将一个Table 对象转换成DataStream 非常简单,只要直接调用表环境的方法 toDataStream() 就可以。 public class TableToDataStream { pub
阅读全文
posted @
2023-06-04 08:06
溪水静幽
阅读(141)
推荐(0) 编辑
FlinkSQL基本API
摘要:Table API 和 SQL 可以看作联结在一起的一套 API,这套 API 的核心概念就是"表"(Table)。在我们的程序中,输入数据可以定义成一张表;然后对这张表进行查询,就可以得到新的表,这相当于就是流数据的转换操作;最后还可以定义一张用于输出的表,负责将处理结果写入到外部系统。 整体处理
阅读全文
posted @
2023-06-03 12:03
溪水静幽
阅读(166)
推荐(0) 编辑
检查点配置
摘要:如果想要为 Flink 应用开启自动保存快照的功能,需要在代码中显式地调用执行环境的.enableCheckpointing()方法: StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironmen
阅读全文
posted @
2023-05-15 21:46
溪水静幽
阅读(179)
推荐(0) 编辑
检查点算法
摘要:Flink 保存检查点的时间点,是所有任务都处理完同一个输入数据的时候。但是不同的任务处理数据的速度不同,当第一个 Source 任务处理到某个数据时,后面的 Sum 任务可能还在处理之前的数据;而且数据经过任务处理之后类型和值都会发生变化,面对着"面目全非"的数据,不同的任务怎么知道处理的是"同一
阅读全文
posted @
2023-05-14 11:33
溪水静幽
阅读(56)
推荐(0) 编辑
广播流之BroadcastStream
摘要:广播状态支持这样的用例:来自一个流的一些数据需要广播到所有下游任务,在那里它被本地存储,并用于处理另一个流上的所有传入元素。 一条流需要根据规则或配置处理数据,而规则或配置又是随时变化的。此时,就可将规则或配置作为广播流广播出去,并以Broadcast State的形式存储在下游Task中。下游Ta
阅读全文
posted @
2023-05-01 17:04
溪水静幽
阅读(232)
推荐(0) 编辑
间隔联结(Interval Join)
摘要:在交易系统中,需要实时地对每一笔交易进行核验,保证两个账户转入转出数额相等,也就是所谓的“实时对账”。两次转账的数据可能写入了不同的日志流,它们的时间戳应该相差不大,所以我们可以考虑只统计一段时间内是否有出账入账的数据匹配。这时显然不应该用滚动窗口或滑动窗口来处理——因为匹配的两个数据有可能刚好“卡
阅读全文
posted @
2022-12-25 19:42
溪水静幽
阅读(655)
推荐(0) 编辑
窗口同组联结(Window CoGroup)
摘要:窗口同组联结(window coGroup):将两条流合并之后开窗处理匹配的元素,调用时只需要将.join()换为.coGroup()就可以。 stream1.coGroup(stream2) .where(<KeySelector>) .equalTo(<KeySelector>) .window
阅读全文
posted @
2022-11-30 21:42
溪水静幽
阅读(68)
推荐(0) 编辑
CoProcessFunction
摘要:对于连接流ConnectedStreams 的处理操作,需要分别定义对两条流的处理转换,因此接口中就会有两个相同的方法需要实现,用数字“1”“2”区分,在两条流中的数据到来时分别调用。我们把这种接口叫作“协同处理函数”(co-process function)。与 CoMapFunction 类似,
阅读全文
posted @
2022-11-26 16:55
溪水静幽
阅读(354)
推荐(0) 编辑
分流
摘要:分流:将一条数据流拆分成完全独立的两条、甚至多条流。也就是基于一个DataStream,得到完全平等的多个子 DataStream 处理函数本身可以认为是一个转换算子,它的输出类型是单一的,处理之后得到的仍然是一个 DataStream;而侧输出流则不受限制,可以任意自定义输出数据,它们就像从“主流
阅读全文
posted @
2022-11-25 22:02
溪水静幽
阅读(460)
推荐(0) 编辑
KeyedProcessFunction
摘要:一、定时器 KeyedProcessFunction 是可以灵活地使用定时器。 定时器(timers)是处理函数中进行时间相关操作的主要机制。在.onTimer()方法中可以实现定时处理的逻辑,而能触发的前提,就是之前曾经注册过定时器、并且现在已经到触发时间。注册定时器的功能,是通过上下文中提供的“
阅读全文
posted @
2022-11-19 13:40
溪水静幽
阅读(908)
推荐(0) 编辑
触发器
摘要:触发器是用来控制窗口什么时候触发计算。所谓的“触发计算”,就是执行窗口函数,认为是计算得到结果并输出的过程。基于WindowedStream 调用.trigger()方法,就可以传入一个自定义的窗口触发器(Trigger) stream.keyBy(...) .window(...) .trigge
阅读全文
posted @
2022-09-25 20:14
溪水静幽
阅读(208)
推荐(0) 编辑
Sink到mysql
摘要:依赖 <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-jdbc_${scala.binary.version}</artifactId> <version>${flink.version}</v
阅读全文
posted @
2022-05-25 10:34
溪水静幽
阅读(100)
推荐(0) 编辑
Sink到Redis
摘要:依赖 <!-- redis connector --> <dependency> <groupId>org.apache.bahir</groupId> <artifactId>flink-connector-redis_2.11</artifactId> <version>1.0</version
阅读全文
posted @
2022-05-23 22:11
溪水静幽
阅读(33)
推荐(0) 编辑
StreamingFileSink
摘要:连接器提供了一个 Sink 来将分区文件写入到支持 Flink FileSystem 接口的文件系统中。 Streaming File Sink 会将数据写入到桶中。由于输入流可能是无界的,每个桶中的数据被划分为多个有限大小的文件。如何分桶是可以配置的,默认使用基于时间的分桶策略,这种策略每个小时创
阅读全文
posted @
2022-05-22 17:37
溪水静幽
阅读(772)
推荐(1) 编辑
Physical Partitioning
摘要:一个transformation之后,Flink提供底层API以允许用户在必要时精确控制流分区,Physical partitioning(或operator partition)就是operator parallel instance即SubTask。 Shuffle (Random partit
阅读全文
posted @
2022-05-21 10:52
溪水静幽
阅读(26)
推荐(0) 编辑