Flink技术学习指南
2022-09-10 09:22:34 0 举报
AI智能生成
flink学习,实时流计算架构
作者其他创作
大纲/内容
常见的方案
聚合类的处理
解决方案
Watermark
allowLateNess
sideOutPut
Windows -----> Watermark -----> allowLateNess -----> sideOutPut
watermark
概念
watermark是一种衡量Event Time进展的机制,它是数据本身的一个隐藏属性
提取watermark
AssignerWithPeriodicWatermarks
AssignerWithPunctuatedWatermarks
多并行度
Flink如何处理乱序?
watermark+window机制。window中可以对input进行按照Event Time排序
Flink何时触发window?
Event Time < watermark时间
在[window_start_time,window_end_time)中有数据存在
时间
EventTime
IngestionTime
processTime
WaterMark的设定
Punctuated Watermark
Periodic Watermark
多并行度
分布式状态容错面临的问题与挑战
如何确保状态拥有精确一次的容错保证?
如何在分布式场景下替多个拥有本地状态的算子产生一个全域一致的快照?
如何在不中断运算的前提下产生快照?
多并行度、多Operator实例的情况下,如何做全域一致的快照?
对应到pv案例
多并行图简易快照
多Operator状态恢复
Source Task自身做快照,并保存到状态后端
Source Task将barrier跟数据流一块往下游发送;
算子
Map
SingleOutputStreamOperator
FlatMap
SingleOutputStreamOperator
Filter
对每个元素都进行判断,返回为 true 的元素
KeyBy
基于 key 对流进行分区
KeyedDataStream
Reduce
average、sum、min、max、count
Aggregations
min、max、sum
Window
KeyedStream
WindowAll
按照某种特性聚集
Window Join
同一个 window 的两个数据流 join
Split和Select
Split 算子将数据流拆分成多个数据流;
Select 算子则选择拆分后你需要的流;
Side Output
侧切流,即分流之后再收集
DataSet Operator
Map、FlatMap、Filter
sink
渠道
ES
redis
Hbase
MYSQL
kafka
Redis Sink
flink to Hbase
原理
重启策略
固定延迟重启策略(Fixed Delay Restart Strategy)
故障率重启策略(Failure Rate Restart Strategy)
没有重启策略(No Restart Strategy)
Fallback 重启策略(Fallback Restart Strategy
状态存储
MemoryStateBackend
FsStateBackend
RocksDBStateBackend
每个 state 都存储在一个单独的 column family
HeapKeyedStateBackend
支持异步 Checkpoint(默认):存储格式 CopyOnWriteStateMap
仅支持同步 Checkpoint:存储格式 NestedStateMap
时间类型
EventTime 为基准来定义时间窗口
IngesingtTime 为基准来定义时间窗口将
ProcessingTime 基准来定义时间窗口将
Exactly-once
开始事务(beginTransaction)创建一个临时文件夹,来写把数据写入到这个文件夹里面
预提交(preCommit)将内存中缓存的数据写入文件并关闭
正式提交(commit)将之前写完的临时文件放入目标目录下。这代表着最终的数据会有一些延迟
丢弃(abort)丢弃临时文件若失败发生在预提交成功后,正式提交前。可以根据状态来提交预提交的数据,也可删除预提交的数据。
内存管理
Network Buffers
Memory Manage pool
User Code
序列化
BasicTypeInfo: 任意 Java 基本类型或 String 类型
BasicArrayTypeInfo: 任意 Java 基本类型数组或 String 数组
WritableTypeInfo: 任意 Hadoop Writable 接口的实现类
TupleTypeInfo: 任意的 Flink Tuple 类型(支持 Tuple1 to Tuple25)。Flink tuples 是固定长度固定类型的 Java Tuple 实现
CaseClassTypeInfo: 任意的 Scala CaseClass(包括 Scala tuples)
PojoTypeInfo: 任意的 POJO (Java or Scala),例如,Java 对象的所有成员变量,要么是 public 修饰符定义,要么有 getter/setter 方法
GenericTypeInfo: 任意无法匹配之前几种类型的类针对前六种类型数据集,Flink 皆可以自动生成对应的 TypeSerializer,能非常高效地对数据集进行序列化和反序列化。
基础
聚合
GroupBy
Distinct
KeyBy
新特征
支持 hive 读写,支持 UDF
Flink SQL TopN 和 GroupBy 等优化
Checkpoint 跟 savepoint 针对实际业务场景做了优化
Flink state 查询
checkpoint
Savepoint
用户通过命令触发,由用户管理其创建与删除
标准化格式存储,允许作业升级或者配置变更
用户在恢复时需要提供用于恢复作业状态的 savepoint 路径
checkpoint
Checkpoint 完成时,在用户给定的外部持久化存储保存
当作业 FAILED(或者CANCELED)时,外部存储的 Checkpoint 会保留下来
用户在恢复时需要提供用于恢复的作业状态的 Checkpoint 路径
state无状态计算&有状态
list state
Managed State
由 Flink 管理的 state
Raw State
Flink 仅提供 stream 可以进行存储数据
operator state
又称为 non-keyed state
常见的 operator state 是 source state
keyed state
Keyed UDF, window state
keyed state
state
其实就是 Checkpoint 所做的主要持久化备份的主要数据
state优点
易用,flink提供了丰富的数据结构,简洁易用的接口;
高效,flink对状态的处理读写快,可以横向扩展,保存状态不影响计算性能;
可靠,flink对状态可以做持久化,而且可以保证exactly-once语义;
语义
EXACTLY ONCE
数据缓存起来
source
sink
AT LEAST ONCE
无需缓存收集到的数据
restore,数据多次处理
source
StreamExecutionEnvironment
预定义的数据流源
基于套接字
基于集合
获取数据源Source
Apache Kafka(源/接收器)
Apache Cassandra(接收器)
Amazon Kinesis Streams(源/接收器)
Elasticsearch(接收器)
Hadoop文件系统(接收器)
RabbitMQ(源/接收器)
Apache NiFi(源/接收器)
Twitter Streaming API(源)
Google PubSub(源/接收器)
Kafka Source
Transform 算子
函数
UDF:User Defined Function,用户自定义函数,一进一出
UDAF:User- Defined Aggregation Funcation 用户自定义聚合函数,多进一出
UDTF: User-Defined Table-Generating Functions,用户定义表生成函数
0 条评论
下一页