Flink/流批OLAP一体 |青训营笔记

51 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第2天

大数据 : 指无法在一定时间内用常规软件工具对其进行获取,储存,处理的数据集合

Haddop =》 Spark =》 Flink (流计算,实时,更快)

实时性:监控业务系统的健康,金融风控,实时推荐用户爱好

流式计算:实时,无限流,动态,无边界,每小时持续运行

Why Flink:

  • Exactly once
  • 状态容错
  • Dataflow 编程模型

Flink分层结构:

  1. SDK层:SQL/TABLE, Datastream, Python
  2. 执行引擎层:提供了统一的DAG, 用来描述数据处理的pipeline,然后在调度层,把DAG转化成分布式环境下的task,task之间通过shuffle传输数据
  3. 状态存储层( State Backend)
  4. 资源调度层 (Resource Manager)

Flink整体架构:

  1. JobManager:负责整个任务的协调工作:调度task,协调容错恢复
  2. TaskManager: 负责执行一个dataflow graph的各个task以及data streams的buffer和数据交换

JobManager:

  1. dispatcher:接收作业,拉起jobmaster
  2. jobmaster:管理一个job的整个生命周期,向resourcemanager申请slot, 然后将task调度到对应的TM
  3. resourcemanager:负责资源的管理和调度

Streaming DataFlow Graph: Source -> map()-> keyBy(), window(), apply() -> Sink

为什么要流批一体?人力成本低: 只需要开发一遍逻辑

流式计算:

  • 实时计算
  • 延迟在秒内
  • 广告推荐,金融风控
  • 无限数据集

批式计算:

  • 离线计算
  • 处理时间在分钟到小时,甚至天
  • 搜索引擎构建索引, 数据分析
  • 有限数据集
  • 对实时性要求不高,只关注最终结果产出时间

两种调度模式:

  • Eager:申请全部资源,所有task之间采取pipeline的形式通信
  • Lazy: 先调度上游,等上游结束再调度下游

流和批shuffle的区别:

  1. shuffle生命周期:流的shuffle与task是绑定的
  2. shuffle数据存储介质:流的shuffle通常在内存里;批shuffle一般在磁盘里
  3. shuffle部署方式:流的shuffle和节点部署在一起,从而减少latency