Flink基础整理
文章目录
- 前言
- 1.Flink系统架构
- 2.编程模型(API层次结构)
- 3.DataSet和DataStream区别
- 4.Flink的批流统一
- 5.Flink的状态后端
- 6.Flink有哪些状态类型
- 7.Flink并行度
前言
提示:下面是根据网络或AI整理:
1.Flink系统架构
- 用户在客户端提交作业(Job)到服务端。
- 服务端为分布式的主从架构。
- Dispatcher 服务负责提供 REST 接口来接收 Client 提交的 Job,运行 Web UI,并负责启动和派发 Job 给 JobManager。
- Resource Manager 负责计算资源(TaskManager)的管理,其调度单位是 slots。
- JobManager 负责整个集群的任务管理、资源管理、协调应用程序的分布执行,将任务调度到 TaskManager 执行、检查点(checkpoint)的创建等工作。
- TaskManager(worker)负责 SubTask 的实际执行,提供一定数量的 Slots,Slots 数就是 TM 可以并发执行的task数。当服务端的 JobManager 接收到一个 Job 后,会按照各个算子的并发度将 Job 拆分成多个 SubTask,并分配到 TaskManager 的 Slot 上执行。
2.编程模型(API层次结构)
- 最底层提供了有状态流:可以自定义状态信息和处理逻辑,但是也需要你自己管理状态的生命周期,容错,一致性等问题。
- 核心开发层:包括 DataStream API 和 DataSet API,它们提供了常见的数据转换,分组,聚合,窗口,状态等操作。这个层级的 api 适合大多数的流式和批式处理的场景。
- 声明式 DSL 层:是以表为中心的声明式 DSL,其中表可能会动态变化(在表达流数据时)。Table API 提供了例如 select、project、join、group-by、aggregate 等操作
- 结构化层:SQL API,它是最高层的 api,可以直接使用 SQL 语句进行数据处理,无需编写 Java 或 Scala 代码。这个层级的 api 适合需要快速响应业务需求,缩短上线周期,代码可移植性和可阅读性高,和自动调优的场景,但也最不灵活和最不具有表现力。
3.DataSet和DataStream区别
4.Flink的批流统一
概念: 批流统一是指Flink提供了一种统一的API和执行引擎,使得批处理(Batch Processing)和流处理(Stream Processing)可以使用相同的API进行编程,并且共享相同的执行计划和优化策略。这一特性简化了开发流程,减少了代码重复,同时提高了系统的灵活性和性能(一套代码处理流或批数据)。
体现在以下几个方面:
- 统一的API:无论是处理有限的数据集(批处理)还是无限的数据流(流处理),开发者都可以使用同一套API进行编程。
- 统一的执行引擎:Flink的执行引擎能够自动识别输入数据是批数据还是流数据,并选择合适的执行模式。
- 统一的状态