这是我参与「第四届青训营 」笔记创作活动的的第2天
大数据 : 指无法在一定时间内用常规软件工具对其进行获取,储存,处理的数据集合
Haddop =》 Spark =》 Flink (流计算,实时,更快)
实时性:监控业务系统的健康,金融风控,实时推荐用户爱好
流式计算:实时,无限流,动态,无边界,每小时持续运行
Why Flink:
- Exactly once
- 状态容错
- Dataflow 编程模型
Flink分层结构:
- SDK层:SQL/TABLE, Datastream, Python
- 执行引擎层:提供了统一的DAG, 用来描述数据处理的pipeline,然后在调度层,把DAG转化成分布式环境下的task,task之间通过shuffle传输数据
- 状态存储层( State Backend)
- 资源调度层 (Resource Manager)
Flink整体架构:
- JobManager:负责整个任务的协调工作:调度task,协调容错恢复
- TaskManager: 负责执行一个dataflow graph的各个task以及data streams的buffer和数据交换
JobManager:
- dispatcher:接收作业,拉起jobmaster
- jobmaster:管理一个job的整个生命周期,向resourcemanager申请slot, 然后将task调度到对应的TM
- resourcemanager:负责资源的管理和调度
Streaming DataFlow Graph: Source -> map()-> keyBy(), window(), apply() -> Sink
为什么要流批一体?人力成本低: 只需要开发一遍逻辑
流式计算:
- 实时计算
- 延迟在秒内
- 广告推荐,金融风控
- 无限数据集
批式计算:
- 离线计算
- 处理时间在分钟到小时,甚至天
- 搜索引擎构建索引, 数据分析
- 有限数据集
- 对实时性要求不高,只关注最终结果产出时间
两种调度模式:
- Eager:申请全部资源,所有task之间采取pipeline的形式通信
- Lazy: 先调度上游,等上游结束再调度下游
流和批shuffle的区别:
- shuffle生命周期:流的shuffle与task是绑定的
- shuffle数据存储介质:流的shuffle通常在内存里;批shuffle一般在磁盘里
- shuffle部署方式:流的shuffle和节点部署在一起,从而减少latency