Flink实战
Flink的具体优势
1)同时支持高吞吐、低延迟、高性能2)支持事件时间3)支持有状态计算4)高度灵活的窗口5)分布式快照6)基于JVM实现独立的内存管理7)Save Points(保存点)Flink编程模型
数据集类型
有界无界flink编程接口(对表的操作方式)
高级语言(用SQL)
SQL声明式语言(用TABLE接口)
table API核心API(用流批API)
DateStreamAPIDataSetAPI底层构建模块(用底层)flink程序结构
环境设定(准备抽水发动机)初始化数据(输入水流)执行转换(水流,分流?)
lambadafunction
class实现function
extends匿名类实现function
new mapfunction实现richfunction
new richmapfunction分区KEY指定()
位置名称key选择器输出数据(输出水流)触发程序(开始接入)flink数据类型
数据类型支持
scala样例类原始类型POJO元组其它特殊类型DataStream API
Dstream编程模型(水流模型)
DataStream数据输入(输入水流)
内置数据源
文件csvsocket集合数据源外部数据源
数据源连接器自定义数据源连接器数据转换操作(水流分流)
singleDstream
Map[Dstream->Dstream] (一进一出)FlatMap[Dstream->Dstream] (一进及一个及以上出)Filter[Dstrem->Dstream] (一进及一个及以下出)KeyBy[Dstream->keyedDstream] (一个管道进多管道出,下游聚合)reduce[KeyedDstream->Dstream](下游管道数据合并手动)aggregate[KeyedDstream->Dstream](下游管道数据合并自动)
summinminBymaxBymultiDstream
union[Dstream->Dstream]connectcomapcoflatmap[Dstream->connectedDstream]split[Dstream->SplitDstream]
union的逆向select[splitDstream->Dstream]iterator物理分区操作
随机
shuffle重调
比例平衡轮流
全局平衡自定义广播数据输出
基本数据输出
文件socket客户端第三方数据输出
mysqlkafkaclickhouse时间概念和watermark
时间概念
事件时间(event)接入时间(lngestion)处理时间(process)watermark
水位线
衡量数据处理进度例子: watermark=2.5 ,窗口为10 =》 8,11,9,12.5 windows窗口计算
windows Assigner窗口分配器
时间
滚动窗口(一段段)
固定时间大小滑动窗口(重复切)
滑动时间窗口时间会话窗口
会话gap
不活跃数据时间周期全局窗口
单个窗口计算Trigger触发数量自定义windows Function
增量窗口
ReduceFunction
两相同类型聚合AggregateFunctionFoldFunction
窗口元属与外部元素合并全量窗口
processwindowFunction
所有数据元素状态数据窗口元数据Trigger窗口触发
自定义内置
eventTimeTrigger
watermark和窗口endtimeprocessTimeTrigger
process与endTimecountinuousEventTimeTriggercountinuousProcessTimeTriggerCountTrigger
数据量DeltaTriggerPurgingTriggerEvictor数据剔除器
countEvictor
数量剔除器DeltaEvictor
阈值剔除器TimeEvictor
时间剔除器延迟数据处理
丢弃迟到事件重定向迟到事件
重定向另外Dstream
回填基于迟到事件更新
延迟容忍度连续窗口计算
独立窗口计算连续窗口计算windows多流合并作业链和资源组AsynchronousI/O异步Flink状态管理和容错
checkPoints/savePoints
checkpoint检测机制
目的
应用异常算子恢复使用
cp开启和间隔设定exactly-once和at-least-once
exactly-once
准确一次at-least-once
至少一次cp超时时间检查点最小间隔
避免cp积压最大并行度执行数量
提高cp效率外部检查点
外部系统流程
第一步:所有 source 节点 trigger Checkpoint第二步:source 节点向下游广播 barrier第三步:当 task 完成 state 备份后,会将备份数据的地址(state handle)通知给 Checkpoint coordinator第四步:下游的 sink 节点收集齐上游两个 input 的 barrier 之后,会执行本地快照第五步: Checkpoint coordinator 收集齐所有 task 的 state handle,向持久化存储中再备份一个 Checkpoint meta 文件SavePoints机制
升级维护集群保存状态有状态计算
状态类型
KeyedStateNoneKeyedStateQuerableState
Querable架构
QuerAbleStateClient
提交查询获取结果QuerableStateClientProxy
接受Client请求处理client请求访问jobmanager访问taskmanager返回结果QuerableStateServer
接收Proxy请求运行在Taskmanager从状态管理器获取状态管理器(水流状态存储)
StateBackend
memorystatebackendFsstatebackendRocksDBstatebackend管理配置
应用级别集群级别DateSet API
DataSources(文件集合通过第三方调用接口传输)
文件类数据集合类数据第三方文件系统通用数据接口DataSet转换(数聚联合排序)
数据处理
mapflatmapmappartitonfilter聚合操作
reduce
两两合并成一个元素reducegroup
一组元素合并一个或多个元素 Aggregate
一组元素合并成单值distinct
去重多表关联
joinouter join
leftrightfull outer joincross
笛卡尔积集合操作
union
合并rebalance
重平衡hashpartition
keyhash重分区RangePartitionSortPartition排序操作
first-nminby/maxbyDataSinks数据输出
文件输出接口调用数据接口迭代计算
增量迭代全量迭代广播变量与分布式缓存
广播变量(数据共享)分布式缓存(文件)Table API
TableEnvironment基本操作
内部Catalog注册
内部Table注册TableSource注册
外部数据源TableSink注册
输出外部Catalog注册DataStream或DataSet与Table转换外部连接器
表连接Table connector
flileSystm connectorkafka connectorESTable Format表格式
csvjsonavrotable表约束update modes更新方式时间概念
事件事件接入时间处理时间TemporalTable临时表FlineTableAPI
数据查询过滤
scanselectfilterwhere窗口操作
group by window
滚动滑动会话over window
类似rownumber聚合操作
groupbygroup by windowoverwindowdistinct多表关联
inner joinouter jointime windowed joinjoin with table functionjoin with temp table排序操作
orderby数据写入
insert into自定义函数
标量函数
单个或多个输入,输出确定类型单列制表函数
单个或多个输入,输出单列或多列聚合函数
一行和多行变一个标量值FlinkSQL
执行SQL
SQL中引用tableSQL中应用注册表SQL中数据输出数据查询与过滤
selectwheregroupwindows窗口操作
滚动滑动会话数据聚合
groupbygroup bywindowover windowdistinct grouping setshavingUDAGG
自定义聚合函数多表关联
inner joinouter joinTimewindowed joinjoin with table function集合操作
unionunion allintersect/excrptinexists



