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