image.png

详情打开idea的:
FlinkDemoTcode工程
C:\Users\ldc\IdeaProjects\FlinkDemoTcode

Environment

Source

File
Collection 集合
Kafka 从kafka获取数据,重点!
Custom 自定义

Transform

我们所有算子都有rich版本

Map

Map_Rich

涉及到外界连接(即状态)的需要用到richMap函数
节省频繁连接带来的开销

FlatMap

有map和filter的功能 ,用collect.out方法写出

Filter

KeyBy

根据键分组
同一个分组的数据,会进入同一个分区
同一个分区内可以有多个分组
两次hash:
第一次 key本身的hashcode方法 hash1
第二次 murmur (hash1) hash2

这样设计的原因是为了适应并行度比分组数小的情况
例如并行度为1的时候有两组,这样不得不将两组的数据都放到一个并行度中

Shuffle

随机分组(分到不同并行度),每次结果不一致

Connect

connect普通流:

两个流 只能合并,不能融合,类似于join
两个连在一起之后, 使用算子处理的时候, 内部还是各自处理各自的
这个两个的数据类型可以不一致
image.png

connect广播流:

两条流的数据可以相互访问
image.png

Union

一个流 可以融合,数据类型必须一致,类似于union

image.png

Agg

sum、max、min等聚合算子,需要紧跟keyby后面
sum, max, min(这里面使用了状态)
非聚合和分组字段默认选的是碰到的第一个值
image.png
maxBy, minBy
非聚合和分组字段 是最终最大值或最小值
默认情况: 如果最大值相等, 其他字段取第一个
image.png

Reduce

可以代替agg,比agg更灵活
1. 聚合结果的类型与输入类型保持一致
2. 如果某个key的第一个元素来的时候, 不会触发reduce函数

Process

new:注意!算子中重写的方法会因为多条数据而被调用多次,但是,算子中的匿名内部类的成员变量只会执行一次!!所有算子都是!!

process可以替换除了keyby以外的所有算子
process算子效率低,吃内存,不用为好

Process_KeyBy

new:注意!算子中重写的方法会因为多条数据而被调用多次,但是,算子中的匿名内部类的成员变量只会执行一次!!所有算子都是!!

使用map来处理并行度不一致问题
通过map的去重功能来管理sum的状态,
到map中寻找key,如果key存在则返回对应值,如果key不存在,则返回0,
然后将map中获取的值与传进来的值相加,相加后再put进去,以保证数据的隔离性
image.png

Rebalance,rescale

以轮询的方式平均分配分区,用以处理数据倾斜
rebalance可能跨节点,而rescale不会夸节点没有产生网络传输效率更高,但不是真正意义上的均分
每次结果一致

Sink

Kafka
Kafka_1
Redis_Hash
Redis_list
Redis_Set
Redis_String
ES
ES_Unbouded
Custom_Mysql
MysqlSink
JDBC

mode

Flink02_Stream_Bounded_WC


项目

Flink01_Project_PV
Flink01_Project_PV_2
Flink02_Project_UV
Flink03_Project_AppStats
MarketSource
Flink04_Project_Order

processFunction API

process算子效率低,吃内存,不用为好

7.6.1 ProcessFunction

image.png

7.6.2 KeyedProcessFunction

image.png

7.6.3 CoProcessFunction(connect)

image.png

7.6.4 ProcessJoinFunction

image.png

7.6.5 BroadcastProcessFunction

后面专门讲解

7.6.6 KeyedBroadcastProcessFunction

keyBy之后使用

7.6.7 ProcessWindowFunction

添加窗口之后使用

7.6.8 ProcessAllWindowFunction

全窗口函数之后使用