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

47 阅读3分钟

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

一.Flink概述

1.概述

Flink是 Apache 基金会旗下的一个开源大数据处理框架。目前,Flink 已经成为各大公司大数据实时处理的发力重点,特别是国内以阿里为代表的一众互联网大厂都在全力投入,为Flink 社区贡献了大量源码。如今 Flink 已被很多人认为是大数据实时处理的方向和未来,许多公司也都在招聘和储备掌握 Flink 技术的人才。

Flink 官方文档:nightlies.apache.org/flink/flink…

2.流式计算特点

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

3.流式计算引擎对比

image.png

4.Flink 特点

  • 流批一体
  • 状态容错 Checkpoint
  • Datflow 编程模型 Window 等高阶需求支持友好
  • Exactly-Once 精确一次的计算语义

5.Flink 开源生态

image.png

二.Flink 整体架构

1.Flink 分层架构

1.SDk层:SQL/Table,DataStream,Python

2.执行引擎层:流/批数据->DAG图->分布式环境下的Task,Task之间通过shuffle传输数据

3.状态存储层:存储算子的状态信息

4.资源调度层:支持部署在多种环境。

2.Flink 整体架构

image.png

JobManager #

JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:

  • ResourceManager

    ResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的单位(请参考TaskManagers)。Flink 为不同的环境和资源提供者(例如 YARN、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。

  • Dispatcher

    Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。

  • JobMaster

    JobMaster 负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。

始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby(请参考 高可用(HA))。

TaskManagers #

TaskManager(也称为 worker)执行作业流的 task,并且缓存和交换数据流。

必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。请注意一个 task slot 中可以执行多个算子(请参考Tasks 和算子链)。

以上来自:nightlies.apache.org/flink/flink…

3.如何做到流批一体

  • SQL层;
  • DataStream API层统一;
  • Scheduler层架构统一:Pipeline Region Scheduler机制
  • Failover Recovery层架构统一;
  • Shuffle Service层架构统一:实现方式是基于文件的Pull Based Shuffle和基于Pipeline的Push Based Shuffle,统一两种模式的架构——Pluggable Shuffle Service。

三.总结

image.png