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

177 阅读5分钟

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

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

1.Apache Flink 概述

Apache Flink 诞生背景

什么是大数据: 无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据

特点:价值化、海量化、多样化、高速化 (4个V)

image.png

  • Hadoop 解决了什么问题?

Hadoop解决了海量数据的分布式存储问题,继而奠定了大数据分布式计算,云计算的基础,新一代、下一代的大数据技术无不构建在 Hadoop 生态基石之上。

大数据计算架构发展史

image.png

史前阶段:传统数仓、Oracle、单机使用

Hadoop分布式、Map-Reduce、离线计算

Spark:批处理、流处理、SQL高阶API、内存迭代计算

Flink:流计算、实时,更快、流批一体Streaming/Batch SQL

为什么需要流式计算

image.png

  • 实时计算的业务场景需求带来了流式计算 带来了大数据计算架构模式变化

    从慢速静态的批式到 快速 实时的流式

    • 数据实时价值更大;
    • 大数据批式处理分钟级、小时级、天极,部分业务场景无法接受;
  • 流式计算特点:

    • 实时计算、快速、低延迟;
    • 无限流、动态、无边界;
    • 7*24 持续运行;

WHY Flink 脱颖而出

流式计算引擎演化发展历程

image.png Apache Flink:一个基于无界(流式)和有界(批式)数据集之上的有状态计算的框架和分布式处理引擎

Flink 作为一个最新实时计算引擎具备如下流计算技术特征:

  • 完全一次保证:故障后应正确恢复有状态运算符中的状态;
  • 低延迟:越低越好。许多应用程序需要亚秒级延迟;
  • 高吞吐量:随着数据速率的增长,通过管道推送大量数据至关重要;
  • 强大的计算模型:框架应该提供一种编程模型,该模型不限制用户并允许各种各样的应用程序在没有故障的情况下,容错机制的开销很低;
  • 流量控制:来自慢速算子的反压应该由系统和数据源自然吸收,以避免因消费者缓慢而导致崩溃或降低性能;
  • 乱序数据的支持:支持由于其他原因导致的数据乱序达到、延迟到达后,计算出正确的结果;
  • 完备的流式语义:支持窗口等现代流式处理语义抽象;
  • Google Dataflow Model 的开源引擎实现。

image.png

流式计算引擎能力对比

image.png

Apache Flink 开源生态

Apache Flink 在开源生态上的能力比较强大,可支持:

  1. 流批一体:支持流式计算和批式计算;
  1. OLAP:Flink 支持 OLAP 短查询场景;
  1. Flink ML:pyFlink、ALink、AIFlow 等生态支持 Flink 在 ML 场景的应用;
  1. Gelly:图计算;
  1. Stateful Function:支持有状态的 FAAS 场景;

image.png

2.Flink 整体架构

Flink 分层架构

image.png 由上至下分为四层: SDK层 执行引擎runtime层 状态存储层 以及 安全调度层

Flink 总体架构

image.png flink集群核心组件:

  1. job manager JM 负责整个任务协调工作: 比如调度任务 协调容错恢复

image.png 2. task manager TM 负责执行一个dataflow graph 的 各个task以及data streams 的buffer 和数据交换

Flink 如何做到流批一体

传统流式 批式架构分开 的缺点

image.png 流式/批式 计算 核心区别 image.png 为什么可以做到流批一体?

因为批式计算本质上是流式计算的特例

everything is streams 批式数据也是一种特殊的数据流

理论上可以用一套引擎架构解决 但需要针对性的进行扩展和优化

image.png

image.png

Flink通过以下几个模块做到流批一体 image.png SQL层

dataStream API层统一

Scheduler调度层架构统一 支持流批场景

failover Recovery层架构统一 (故障容错恢复层)

shuffle service层架构统一

image.png

3. Flink 架构优化

流/批/OLAP 业务场景概述

image.png

三种业务场景的特点以及挑战

特点

image.png

挑战

image.png

为什么三种场景可以用一套引擎来解决

通过对比可以发现:

批式计算是流式计算的特例,Everything is Streams,有界数据集(批式数据)也是一种数据流、一种特殊的数据流;

OLAP 计算是一种特殊的批式计算,它对并发和实时性要求更高,其他情况与普通批式作业没有特别大区别。

image.png

image.png

Flink 如何支持 OLAP 场景

  • Flink 做 OLAP 的优势

image.png

  • 统一引擎:流处理、批处理、OLAP 统一使用 Flink 引擎;

    • 降低学习成本,仅需要学习一个引擎;
    • 提高开发效率,很多 SQL 是流批通用;
    • 提高维护效率,可以更集中维护好一个引擎;
  • 既有优势:利用 Flink 已有的很多特性,使 OLAP 使用场景更为广泛;

    • 使用流处理的内存计算、Pipeline;
    • 支持代码动态生成;
    • 也可以支持批处理数据落盘能力;
  • 相互增强:OLAP 能享有现有引擎的优势,同时也能增强引擎能力

    • 无统计信息场景的优化;
    • 开发更高效的算子;
    • 使 Flink 同时兼备流、批、OLAP 处理的能力,成为更通用的框架。
  • Flink OLAP 场景的挑战

    • 秒级和毫秒级的小作业;

    • 作业频繁启停、资源碎片;

      Flink OLAP 计算相比流式和批式计算,最大的特点是 Flink OLAP 计算是一个面向秒级和毫秒级的小作业,作业在启动过程中会频繁申请内存、网络以及磁盘资源,导致 Flink 集群内产生大量的资源碎片;

    • Latency + 高 APS 要求;

      OLAP 最大的特点是查询作业对 Latency 和 QPS 有要求的,需要保证作业在 Latency 的前提下提供比较高的并发调度和执行能力,这就对 Flink 引擎提出了一个新的要求。

image.png Flink OLAP 架构现状

image.png

课程总结

image.png