这是我参与「第四届青训营」笔记创作活动的第2天
一.Flink概述
1.概述
Flink是 Apache 基金会旗下的一个开源大数据处理框架。目前,Flink 已经成为各大公司大数据实时处理的发力重点,特别是国内以阿里为代表的一众互联网大厂都在全力投入,为Flink 社区贡献了大量源码。如今 Flink 已被很多人认为是大数据实时处理的方向和未来,许多公司也都在招聘和储备掌握 Flink 技术的人才。
Flink 官方文档:nightlies.apache.org/flink/flink…
2.流式计算特点
- 实时计算、快速、低延迟;
- 无限流、动态、无边界;
- 7*24 持续运行
3.流式计算引擎对比
4.Flink 特点
- 流批一体
- 状态容错 Checkpoint
- Datflow 编程模型 Window 等高阶需求支持友好
- Exactly-Once 精确一次的计算语义
5.Flink 开源生态
二.Flink 整体架构
1.Flink 分层架构
1.SDk层:SQL/Table,DataStream,Python
2.执行引擎层:流/批数据->DAG图->分布式环境下的Task,Task之间通过shuffle传输数据
3.状态存储层:存储算子的状态信息
4.资源调度层:支持部署在多种环境。
2.Flink 整体架构
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。