Flink 系列第1篇:零基础入门|核心基础、架构原理、分层API、组件详解(夯实入门必备)

张开发
2026/4/15 10:56:01 15 分钟阅读

分享文章

Flink 系列第1篇:零基础入门|核心基础、架构原理、分层API、组件详解(夯实入门必备)
专栏定位Flink入门开篇夯实基础认知拆解核心概念、架构组件、分层API为后续高阶内容批流一体、窗口时间、状态管理铺垫零基础能看懂、入门者能吃透、开发者可对标架构适用人群Flink零基础入门、大数据开发初学者、实时计算入门、架构认知梳理核心价值通俗拆解理论背景架构细节API分层补充生产落地提示规避入门误区搭建完整的Flink基础认知框架一、Flink 介绍与理论背景1.1 Flink 核心优点生产选型关键Flink 作为当前实时计算领域的主流引擎核心优势覆盖性能、功能、部署、扩展性全维度也是其替代Spark Streaming的核心原因批流一体基于事件驱动Event-driven同时完美支持流处理和批处理无需单独开发两套程序高性能基于内存计算兼顾高吞吐与低延迟解决传统流式引擎性能瓶颈数据一致性支持 Exactly-once精确一次语义彻底保证计算结果的正确性和一致性分层API提供不同层级的编程接口满足入门、进阶、定制化等不同开发需求高可用支持高可用配置和保存点Savepoint机制保障作业稳定运行故障可快速恢复多部署方式支持本地、远端集群、云端等多种部署方案适配不同生产环境横向扩展架构支持动态扩容可根据业务流量灵活调整集群规模完善生态社区活跃度极高配套工具、类库丰富问题排查资源充足1.2 Flink 理论背景核心底层支撑Flink 的核心设计源于三篇关键文献也是理解其底层原理的核心依据入门无需深钻细节但需了解核心贡献《Lightweight Asynchronous Snapshots for Distributed Dataflows》核心奠基提出轻量级异步分布式快照Asynchronous Barrier SnapshotABS方案颠覆传统分布式快照模式既支持无环图也支持有环图可实现线性扩展传统快照类似“拍照”需同步保存所有算子状态和管道数据开销大ABS 异步执行不阻塞业务性能更优《Apache FlinkTM: Stream and Batch Processing in a Single Engine》设计指南官方技术文档详细阐述 Flink 批流一体的设计思路、核心组件实现解决入门者对 Flink 架构设计的困惑是理解底层逻辑的关键参考《The world beyond batch: streaming 101/102》业务落地指导详解流式计算的核心概念时间、窗口、触发器等是 Flink 时间语义、窗口机制的设计基础作者配套 YouTube 动画演示直观理解流式计算的核心逻辑1.3 事件驱动型应用Flink 核心应用场景先看两个真实生产需求快速理解事件驱动型应用的价值运维监控几万台服务器上报监控数据需分离 CPU、MEM、LOAD 指标触发自定义规则告警安全运维从每日访问日志中识别爬虫程序实时限制异常 IP 访问事件驱动型应用定义一类具有状态的应用从一个或多个事件流提取数据根据到来的事件触发计算、状态更新或外部动作。与传统架构对比传统架构读写远程事务型数据库如 MySQL数据与计算分离IO 开销大、延迟高事件驱动架构数据与计算不分离应用直接访问本地内存/磁盘数据吞吐更高、延迟更低Flink 完美支撑事件驱动型应用的核心特性高效状态管理自带 State Backend可灵活存储中间状态信息支撑有状态计算丰富窗口支持内置滚动窗口、滑动窗口、会话窗口等满足不同聚合场景需求多时间语义支持 Event Time、Processing Time、Ingestion Time适配不同业务的时间需求多级容错支持 At Least Once至少一次、Exactly Once精确一次容错级别保障数据一致性1.4 Flink 特性总结选型核心参考Flink 从底层支持多种场景的应用开发核心特性可概括为核心能力批流一体、Exactly-Once 语义、强大的状态管理部署适配支持 YARN、Mesos、Kubernetes 等多种资源管理框架灵活适配不同集群环境生产验证阿里巴巴全集团推广使用可扩展到数千核心状态支持 TB 级别仍能保持高吞吐、低延迟结论Flink 已成为实时计算领域的首选引擎兼顾性能、稳定性和扩展性适配从入门到核心业务的全场景。二、Flink 核心架构三层架构模型Flink 采用分层架构从顶层到底层依次为API Libraries 层、Runtime 核心层、物理部署层各层职责清晰、协同工作支撑批流一体的计算能力。2.1 API Libraries 层顶层应用层该层面向开发者提供编程 API 和顶层类库是开发者接触 Flink 的核心入口兼顾易用性和扩展性。编程 APIDataStream API用于流处理处理无界数据流如 Kafka 消息DataSet API用于批处理处理有界数据流如 Hive 表数据顶层类库开箱即用降低开发成本CEP 库用于复杂事件处理如用户行为序列分析、异常行为检测SQL Table 库用于结构化数据查询支持批流统一查询语义FlinkML基于批处理的机器学习库支持常见机器学习算法Gelly图形处理库用于图计算场景如社交网络分析2.2 Runtime 核心层中间执行层Flink 分布式计算框架的核心实现层是批流一体的核心支撑负责将上层 API 转换为可执行的任务完成调度、资源分配和执行。核心功能包括作业转换将用户编写的程序转换为 JobGraph、ExecutionGraph任务调度将任务分配到不同节点执行实现负载均衡资源分配协调集群资源为任务分配所需的 Slot 资源任务执行管理任务的生命周期监控任务运行状态核心优势基于流式引擎设计可同时运行流处理和批处理程序无需单独维护两套引擎。2.3 物理部署层底层支撑层负责支持 Flink 应用在不同平台上部署运行适配不同的集群环境核心作用是提供稳定的运行环境和资源支撑。支持的部署平台本地、Standalone 集群、YARN、Mesos、Kubernetes、云端如 AWS、阿里云。2.4 核心包与核心实现内容2.4.1 核心包开发/运维必知flink-coreFlink 核心基础包包含核心数据结构、抽象类flink-distFlink 分布式部署包用于集群部署flink-javaJava 语言相关的 API 实现包flink-libraries顶层类库集合CEP、SQL 等2.4.2 核心实现内容底层原理重点后续专栏会逐一拆解此处先梳理核心模块建立整体认知基本组件和逻辑计划Flink 组件、集群构建、客户端逻辑计划生成物理计划生成JobManager 对逻辑计划的抽象、物理计划的生成与管理核心组件实现JobManager、TaskManager 内部组件细节算子生命周期算子的构建、生成、运行、销毁全流程网络栈中间结果抽象、输入输出管理、BackPressure背压、Netty 连接水印Watermark和 Checkpoint容错、时间语义的核心实现任务调度Flink-scheduler调度算法、负载均衡逻辑异常处理用户代码异常后Flink 如何保障 Exactly-once 语义SQL 执行流程Table/SQL 解析、优化、执行以及 Flink 与 Hive 的集成三、Flink 分层 API从易到难按需选择Flink 提供三层 API遵循“一致性由下至上递增、表达能力由下至上递减”的原则开发者可根据业务复杂度和技术需求选择合适的 API。3.1 SQL Table API最易用入门首选面向 SQL 开发者无需编写复杂的 Java/Scala 代码支持批流统一查询语义一致。核心优势对有界流批和无界流流使用相同的查询语义结果一致功能支持基本查询、聚合、关联还支持自定义标量函数UDF、聚合函数UDAF、表值函数TVF适用场景结构化数据查询、简单聚合统计、快速落地业务需求无需深入理解 Flink 底层3.2 DataStream DataSet API核心 API开发常用Flink 数据处理的核心 API支持 Java、Scala 语言封装了数据读取、转换、输出的常用操作灵活性适中。DataStream API处理无界数据流支持实时转换、窗口、状态管理DataSet API处理有界数据流支持批处理的各种转换操作如 Map、Reduce、Join适用场景大部分实时/批处理业务需要一定的编程基础可满足常规业务需求3.3 Stateful Stream Processing底层 API定制化首选最低级别的抽象通过 Process Function 内嵌到 DataStream API 中灵活性最高允许开发者对时间和状态进行细粒度控制。核心优势可自定义状态管理、时间触发逻辑支持复杂的业务场景适用场景复杂事件处理、自定义窗口、精细的状态控制如自定义容错逻辑注意学习成本高需深入理解 Flink 状态、时间语义等底层原理四、Flink 基本架构Master-Slave 架构Flink 采用标准的 Master-Slave 架构集群启动后核心进程包括1 个 JobManagerMaster、至少 1 个 TaskManagerSlave配合 Client、Dispatcher、ResourceManager 完成作业提交和执行。4.1 核心组件职责清晰必懂Master 端组件集群管理核心JobManager核心 Master核心职责调度任务、协调 Checkpoint、故障恢复、收集作业状态、管理 TaskManager具体工作接收 Dispatcher 传递的执行程序JobGraph、逻辑数据流图、类文件、第三方库将 JobGraph 转换为可执行的 ExecutionGraph向 ResourceManager 申请执行任务所需的资源Slot将 ExecutionGraph 分发给对应的 TaskManager 执行高可用部署可部署多个 JobManager一个为 Leader其余为 Standby故障时自动切换Dispatcher核心职责接收 Client 提交的作业程序转发给 JobManager附加功能提供 Web UI 界面用于监控作业运行状态、查看日志ResourceManager核心职责管理集群资源Slot协调资源分配具体工作接收 JobManager 的资源请求分配拥有空闲 Slot 的 TaskManager管理 TaskManager 注册的 Slot统一调度集群资源对接第三方资源管理平台YARN、K8s 等当资源不足时申请额外资源Slave 端组件任务执行核心TaskManagerWorker 节点核心职责实际执行计算任务汇报节点资源和任务运行状态具体工作启动后将自身拥有的 Slot 注册到 ResourceManager接收 JobManager 分发的子任务SubTask并执行向 JobManager 汇报节点内存、磁盘、任务运行状态等信息Client客户端用户提交 Flink 作业的入口并非集群核心进程仅负责作业提交和预处理接收用户编写的 Flink 程序和提交参数选择部署模式YARN Per Job、Standalone、YARN Session 等将程序转换为 JobGraph提交给 Dispatcher4.2 组件通讯机制Flink 所有组件通过Actor System进行通讯核心特点Actor System 是 Actor 的容器提供调度、配置、日志等服务包含启动 Actor 的线程池本地 Actor 通过共享内存传递消息开销低远程 Actor 通过 RPC 调用传递消息实现跨节点通讯4.3 Task 与 SubTask任务执行单元4.3.1 Task任务链Flink 将可链接的算子无 shuffle 操作链接在一起形成一个 Task是最小的可链接操作链。核心目的减少线程间切换、数据序列化/反序列化、缓冲区交换的开销降低延迟、提高吞吐量注意会产生 shuffle 的算子如 KeyBy、GroupBy不能被链接需单独作为一个 Task4.3.2 SubTask子任务一个 Task 会根据其并行度拆分为多个 SubTask子任务是实际执行的最小单元。JobManager 负责拆分 SubTask并分配给 TaskManager 执行每个 SubTask 对应一个独立的线程由 TaskManager 管理TaskManager 实际执行的是 SubTask而非 Task4.4 资源管理Slot 核心解析Slot 是 Flink 资源管理的核心概念本质是 TaskManager 计算资源的子集用于隔离任务资源。基础逻辑一个 TaskManager 是一个 JVM 进程可配置多个 Slot如 5 个Slot 将 TaskManager 的资源内存平均拆分不同 SubTask 在不同 Slot 中执行避免资源竞争Slot 仅隔离内存不隔离 CPU同一 TaskManager 中的 SubTask 可共享 TCP 连接降低网络开销Slot 共享机制Flink 允许同一 Job 的多个 SubTask即使来自不同 Task共享一个 Slot共享原则不能形成算子链但属于同一个 Job核心价值提高 Slot 利用率避免资源浪费如低资源需求的 Sink 算子与高资源需求的 KeyBy 算子共享 SlotSlot 数量约定Flink 默认一个 Job 所需的 Slot 数量 所有算子的最高并行度五、Flink 核心语义与数据流模型5.1 三大核心概念入门必记5.1.1 Streams流Flink 中所有数据都以流的形式存在分为两种类型是区分批处理和流处理的核心有界流数据量固定不随时间增长如 Hive 表、本地文件对应批处理无界流数据随时间持续产生无固定大小如 Kafka 消息、服务器监控日志对应流处理5.1.2 State状态状态是流式计算的核心指流式计算过程中需要保存的中间信息用于容错恢复和持久化。核心作用支撑 Exactly-once 语义将中间数据写入状态故障后可恢复保证计算结果一致支持增量计算流式计算本质是增量更新需通过状态查询历史数据故障恢复集群故障时可通过状态恢复作业运行状态无需重新计算5.1.3 Time时间时间是 Flink 流式计算的核心维度用于判断业务延迟、划定窗口范围Flink 支持三种时间语义Event Time事件时间事件产生的时间如日志中的时间戳最贴合业务实际Processing Time处理时间Flink 处理该事件的时间节点本地时间最简单但精度低Ingestion Time摄取时间事件被 Flink 接收的时间介于 Event Time 和 Processing Time 之间5.2 Flink 数据流模型Flink 程序的核心构建模块是流Streams和转换Transformations整体数据流类似有向无环图DAG。核心流程Source → Transformations → SinkSource数据输入源如 Kafka、Hive、本地文件Transformations数据转换如 Map、KeyBy、Window 等算子实现业务计算逻辑Sink数据输出目的地如 Kafka、MySQL、HDFS5.2.1 WordCount 示例理解数据流以经典的 WordCount 计数程序为例直观理解数据流模型Source消费 Kafka 中的文本消息无界流TransformationsMap拆分单词→ KeyBy按单词分组→ TimeWindow窗口聚合→ Sum计数Sink将计数结果写入 HDFS 文件注意一个转换操作如聚合可能包含多个算子算子是数据流中的最小转换单元。5.2.2 算子链优化性能分布式运行时Flink 将多个可链接的算子无 shuffle合并为一个 Task由同一个线程执行称为算子链。核心价值减少线程切换、消息序列化/反序列化、缓冲区交换的开销降低延迟、提高吞吐量示例Map 算子和 Filter 算子无 shuffle会被链接为一个 Task共享一个线程执行5.2.3 并行度性能调优核心并行度是算子被拆分的子任务数量决定了任务的并行执行能力是 Flink 性能调优的关键。核心特点每个数据流会被拆分为多个分区每个算子对应多个 SubTask 并行执行算子的并行度决定了该算子的计算能力并行度越高吞吐越高受限于集群资源上下游算子并行度不同时数据流会进行重新分配shuffle六、Flink 中的窗口和时间核心进阶铺垫窗口和时间是 Flink 流式计算的核心用于解决“无界流如何进行聚合计算”的问题——通过窗口划定聚合范围通过时间语义确定窗口的触发时机。窗口模型Flink 支持多种窗口适配不同聚合场景滚动窗口Tumbling Window窗口大小固定无重叠如每 5 分钟一个窗口滑动窗口Sliding Window窗口大小固定有重叠如每 2 分钟滑动一次窗口大小 5 分钟会话窗口Session Window无固定大小根据事件间隔划分如事件间隔超过 10 秒开启新窗口时间语义三种时间语义Event Time、Processing Time、Ingestion Time对应不同的窗口触发逻辑后续专栏会详细拆解。七、其他核心特性Flink 还有多个高级特性支撑核心业务的稳定运行后续专栏会逐一深入拆解有状态的算子操作支持复杂的状态管理适配有状态计算场景容错机制基于 Checkpoint 和 Savepoint实现故障自动恢复Exactly-once 语义通过状态管理和分布式快照保证数据精确一次处理八、全篇核心总结Flink 核心定位批流一体的实时计算引擎高性能、高可用、强一致性是实时计算首选架构分层API Libraries 层开发入口→ Runtime 核心层执行核心→ 物理部署层环境支撑API 分层SQL Table易用→ DataStream/DataSet核心→ Stateful Stream Processing定制化核心组件JobManagerMaster调度管理、TaskManagerSlave任务执行、Dispatcher接收作业、ResourceManager资源管理核心概念流有界/无界、状态容错核心、时间窗口触发依据、并行度性能调优关键

更多文章