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

155 阅读3分钟

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

整体架构

整体.png

Flink概述

发展过程:Hadoop -> Spark -> Flink
Strom/SparkStreaming/Flink(流式计算框架)对比: 对比.png Flink优点:

  • 基于事件驱动(Event-driven)的应用,支持流处理和批处理;
  • 支持精确一次(Exactly-once)的计算语义,完美保证一致性和正确性;
  • 状态容错,checkpoint(实现了标准的Chandy-Lamport算法)是实现容错机制最核心的功能,它能够根据配置周期性地基于Stream中各个Operator/task的状态来生成快照,从而将这些状态数据定期持久化存储下来;
  • DataFlow编程模型,基于内存的计算,高吞吐、低延迟;
  • 高可用配置,横向扩展架构(动态扩容),多样化部署方式。

Flink整体架构

分层架构:

  • 编程API和Libraries层(SDK层):SQL/Table、DataStream、Python
  • Runtime层(执行引擎层):核心实现层,包括作业转换(DAG图),任务调度(Task),资源分配,任务执行,状态存储(state backend)等功能,在流式引擎下同时运行流处理程序和批处理程序
  • 物理部署层:多平台部署 分层架构图.png

整体架构(集群两大核心组件):

  • JobManager(JM):负责整个任务的协调工作,包括:调度task、触发协调Task 做 Checkpoint、协调容错恢复等;
  • TaskManager(TM):负责执行一个DataFlowGraph 的各个task 以及data streams 的 buffer和数据交换。 两大核心组件.png

JobManager工作过程:
JobManagers 接收由 Dispatcher 传递过来的执行程序(包含了作业图JobGraph、逻辑数据流图logical dataflow graph、所有的classes文件、第三方类库libraries等);紧接着JobMaster会将JobGraph转换为执行图ExecutionGraph,然后向ResourceManager申请资源来执行该任务,一旦申请到资源,就将执行图分发给对应的TaskManagers。 jobmanager.png

做流批一体的模块:

  • SQL层;
  • DataStream API层统一,批和流都可以使用DataStream API来开发;
  • Scheduler层架构统一,支持流批场景(两种调度模式:EAGER、LAZY),都是按照Pipeline Region粒度来申请资源和调度任务;
  • Failover Recovery层架构统一,支持流批场景;
  • Shuffle Service层架构统一,流批场景选择不同的Shuffle模式(在Streaming和OLAP场景:Pipeline的Shuffle模式、在Batch场景:Blocking的Shuffle模式)。 流批一体1.png

Shuffle通常有几种不同的实现:

  • 基于文件的PullBased Shuffle,比如Spark或MR,它的特点是具有较高的容错性,适合较大规模的批处理作业,由于是基于文件的,它的容错性和稳定性会更好一些;
  • 基于Pipeline的Push Based Shuffle,比如Flink、Storm、Presto等,它的特点是低延迟和高性能,但是因为shuffe数据没有存储下来,如果是batch任务的话,就需要进行重跑恢复。

Flink架构优化

流/批/OLAP三种业务场景的的特点比对: 场景对比.png

Flink OLAP架构现状:

  • Client:提交SQL Query;
  • Gateway:接收Client 提交的SQL Query,对SQL进行语法解析和查询优化,生成Flink 作业执行计划,提交给Session集群;
  • Session Cluster:执行作业调度及计算,并返回结果。 OLAP架构.png

精选案例讲解

电商流批一体实践:

  • 抖音电商业务原有的离线和实时数仓架构: 实时-离线.png

  • 电商流批一体实践: 流批一体.png

Flink OLAP场景实践(HTAP): HTAP.png

引用参考

1. Flink中文文档
2. 【大数据专场学习资料一】第四届字节跳动青训营
3. 【大数据专场学习资料二】第四届字节跳动青训营
4. 字节跳动青训营官方
5. Flink系列(一)——Flink核心概念综述
6. Flink状态管理与checkPoint数据容错机制深入剖析-Flink牛刀小试