project/flink/flink.md

258 lines
5.4 KiB
Markdown
Raw Normal View History

2022-06-21 10:13:53 -04:00
## Hadoop生态圈
### Yarn资源调度
MR on Yarn
Storm on Yarn
Spark on Yarn
Flink on Yarn
### HDFS
### MR
分而治之
## Lambda架构
离线计算 MapReduce,Hive:
实时计算
## Apache Spark
生态圈完善
Spark core 批计算 取代MR,
1. 预先申请资源Spark申请资源的粗粒度的资源申请,启动任务速度快,task完毕executor 不会立即释放.MR细粒度资源申请,执行完毕后立即释放.
2. Spark基于内存计算cache persisit内存计算pipline,RDD存储逻辑,partion
Spark streaming 流计算 取代storm
1. 微批
2. 无状态,batch
3. 有状态计算updateStateByKey(checkpoint),flink
4. 无界有界,window窗口和水位线处理顺序问题
spark sql sql
Spark mlib 机器学习
批处理只是流数据的一个极限特例而已.
## Flink
1. 支持高吞吐,低延迟,高性能\
2. 支持时间时间(Event Time)概念,结合WaterMark处理乱序数据.
1. spark基于系统时间,数据到系统的时间,
2. flink基于用户带来的时间
3. 支持有状态计算,并且支持多种状态 内存,文件,RocksDB
4. 支持高度灵活的窗口,time,count,session
5. 基于轻量级分布式快照(CheckPoint)实现容错保证exactly-once语义
6. 基于JVM实现独立内存管理
7. Save points 保存点,方便代码升级
## Flink与Spark对比
### spark
pipline
spark与MR速度原因
有界与无界流
集群
1. master,管理集群中所有Worker进而管理了集群资源
2. worker管理各个节点上的资源mem core
1. WORKER_MEMORY
2. WORKER_CORE
3. Driver任务调度
4. Executor执行task
### Flink集群
1. JobManager(JVM进程)master
1. 资源调度
2. 任务调度,触发集群进行checkpoint,
2. TaskManager(JVM进程)slaver
1. TaskManager向JobManager注册资源
2. TackManager中资源使用Task slot进行隔离,隔离内存无法隔离核.
3. TaskManager 3G 3Core
4. 设置3个task slot 平分TaskManager
5. task slot 一组固定资源
## 开发
1. 准备环境,创建/获取
2. 数据处理逻辑
3. 启动Flink任务
## 提交集群
1. Yarn-Session
1. 提交前,需要yarn去启动一个flink集群(yarn-session)
2. 启动成功后,通过flink run 这个命令去往flink集群中提交任务
3. 当job执行完毕,yarn-session集群并不会关闭,等待下一个job提交,一直占用集群资源(JobManager),好处job启动时间变短
2. Run a flink job on yarn
1. 直接去yarn中提交一个flink job,在job执行之前,先去启动一个flink集群,集群启动成功,job在执行,当job执行完毕,flink集群一同关闭,释放资源
2. 每个job执行完,集群关闭,但是每个job启动时间变长.
### 搭建高可用集群
flink JobManager元数据checkpoint,数据存储,hadoop插件.
### JobManager分担压力Flink on yarn
1. jobManager任务管理,yarn资源管理.分担jobManager压力
2. 降低维护成本yarn
### 运行流程
RM,NM,yarn运行需要hdfs
1. 上传jar及配置文件
2. 为applicationMaster申请资源
3. 分配node资源,启动applicationmaster,下载jar及配置文件
4. applicationMaster为taskmanager申请资源
5. yarn分配node并启动TaskManager
6. 分配任务taskManager中运行
7. taskManager下载文件.
## HA
1. 主备
2. 重启
## 算子并行度
1. 配置文件中设置
2. 提交job的时候,通过-p选项来设置
3. 代码中设置parallelism
4. 算子上设置
## 任务调度算子链
本地化级别:PROCESS_LOCAL
1. 不同的Task下的subtask要分发到相同的TaskSlot中.降低数据传输,提高执行效率.尽可能实现算子链
2. 相同的Task下的subtask要分发到不同的TaskSlot中充分利用集群资源.
3. TaskSlot个数决定了job未来执行的并行度,job数不能大于TaskSlot数.
### 算子->函数
1. Stateful Stream Processing=========Low-level building block (streams,state[event]time)
2. DataStream/DataSetApi============Core Api
3. Table Api========================Declaretive DSL
4. sql=============================High-level Language
### flatMap代替filter
map,flat(扁平)
union 数据流何工,数据流中的数据必须一致.
connect假合并,数据流中数据可以不一样,comap
split 可以根据一定的条件拆分数据流.
side out
## 卡口数据
相同key的数据一定是由某一个subtask处理,一个subtask可能会处理多个key所对应的数据.
### 统计每分钟卡口流量
时间映射成分钟字段,直接count
每分钟每个卡口,组合key
富函数可获取上下文及生命周期.
process底层api
广播流
## 分区策略
1. shuffle==================增大分区,数据倾斜,增加并行度使用
2. rebalance================增大分区,数据倾斜,增加并行度使用
3. rescale==================减少分区,防止大量网络传输,降低并行度.
4. broadcast================广播,大量数据冗余,映射表
5. Forward=================上游分区与下游分区一一对应的分发,窄依赖
6. global===================上游中所有数据分发到下游中第一个分区中.
7. keyby===================可以根据用户指定的字段来分发
8. partiooncustom===========自定义分区策略
DataFlow
1. source
2. transformation
3. sink
## 恰好一次
幂等处理
## Flink State
会持久化到远端
1. Keyed State
1. value state
2. list state
3. map state
4. ReducingState
5. AggregationState替代FoldingState
2. No-Keyed State(Operator State)