警告:即将离开本站

点击"继续"将前往其他页面,确认后跳转。

侧边栏壁纸
  • 累计撰写 20 篇文章
  • 累计创建 2 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Flink版本核心特性调研

dengdz
2025-10-11 / 0 评论 / 0 点赞 / 7 阅读 / 0 字

1. 背景

为了支持后面逐渐接入的实时分析需求,现在调研多个flink版本的重要的新特性,范围:

Flink1.17 - Flink2.1

2. Flink1.17

2.1. 总结

Flink 1.17 的核心目标是持续推进 Flink 在 实时数仓、大规模流/批处理 场景下的生产落地。

2.2. 新特性与改进

  1. 批处理

  2. 流处理

2.2.1. 批处理(Batch)

功能

说明

新特性

引入新的 SQL API

  1. 引入了新的 Delete 和 Update API

  2. 扩展了 ALTER TABLE 语法,包括 ADD/MODIFY/DROP 列、主键和 Watermark 的能力(即修改表中的主键字段或者水位线字段)

引入SQL Gateway

引入了 SQL Client 的 gateway 服务,允许用户将 SQL 提交给远端的 SQL Gateway,支持通过 SQL 语句来管理作业

Hive兼容新特性

  1. 引入Sink到Hive时自动进行文件合并的新特性

  2. 引入了一些原生的 Hive 聚合函数如SUM/COUNT/AVG/MIN/MAX

预测执行功能支持了 Sink 算子

Runtime 的预测执行支持了 Sink 算子,同时改进了慢任务的检测,之前只考虑慢任务的执行时间,现在还考虑数据量。(预测执行是指运行过程中如果发现有运行快的和运行慢的子任务,会将运行慢的子任务复制到已经执行完的运行快的分区一份,谁先执行完就采用哪个的结果)

改进和优化

自适应批处理调度器

自适应批处理调度器成为 Batch 模式的默认调度器。该调度器可以根据每个任务节点处理的数据量,自动为其设置合适的并行度

混合 Shuffle 模式

混合 Shuffle 模式现在支持自适应批调度器和预测执行,支持重用中间数据

TPC-DS查询优化

  1. TPC-DS 查询时优化器可以根据查询中 join 个数自动选择合适的 join-reorder 算法;

  2. 引入了动态 local hash aggregation 策略,可以根据数据的分布动态确定是否需要在本地进行聚合操作以提高性能

2.2.2. 流处理(Streaming)

功能

说明

新特性

Streaming SQL 引入EXPLAIN PLAN_ADVICE(执行计划建议)

引入了一个实验性功能,可以检测用户 SQL 潜在的正确性风险,并提供优化建议,例如:

  1. Watermark 延迟设置不合理建议将 watermark delay 从 1h 调整为 5min

  2. 未启用 mini-batch ,建议开启 mini-batch 以减少状态访问压力等

引入Checkpoint REST API

引入了一个 REST API ,可以在作业运行时手动触发具有自定义 Checkpoint 类型的 Checkpoint(自定义类型是指用户可以指定为做全量还是增量的检查点)

Streaming FileSink 新增扩展

添加了对 ABFS (微软云产品)的支持

改进和优化

优化 Watermark 对齐

优化了Watermark 对齐机制,避免了下游算子缓存过多的数据,提高了流作业的执行效率

RocksDBStateBackend 升级

升级到6.20.3-ververica-2.0 ,从而为 RocksDBStateBackend 带来了一些相关的改进

Calcite 升级

升级到 1.29.0 以提高 Flink SQL 系统的性能和效率

2.2.3. 其他重要改进

特性

说明

新特性

支持Task 级别火焰图

Flame Graph 功能提供了针对 task 级别的可视化支持,使得用户可以更详细地了解各个 task 的性能

为flink引入通用的令牌机制

在 Flink 1.17 之前,Flink 只支持 Kerberos 认证和基于 Hadoop 的令牌。1.17 之后引入了自身的认证协议,允许用户在未来可以添加对非 Hadoop 框架的支持。

改进和优化

建议使用 Java 11+

从 Flink 1.17 开始,建议使用 Java 11 或更高版本,(部分第三方库已弃用 JDK 8)

开始弃用 Scala API

在之后的规划中,决定将 Scala 的 API 慢慢移除,更专注于 Java API

优化 Kerberos 交互流程

Flink 改进了与 Kerberos 的交互方式,减少了与 KDC 委托令牌获取过程中的网络请求次数


3. Flink1.18

3.1. 总结

Flink1.17发布后,Flink Table Store独立孵化,更名为Apache Paimon,Flink1.18的主题是开启流式湖仓之路,因此在这个版本中主要是对Flink SQL的提升,引入了一些相关 Streaming Lakehouse API,例如支持了JDBC Driver、存储过程、时间旅行和分区管理语法等,同时对流批处理做了一进步优化

3.2. 新特性与改进

  1. Flink SqL

  2. 流处理

  3. 批处理

特性

说明

新特性

SQL Gateway 引入 JDBC Driver

可通过标准 JDBC 客户端(如 DBeaver、Jupyter)连接 Flink 执行 SQL连接方式:jdbc:flink://host:port支持 SQL 编辑、执行、结果查看

SQL 连接器引入存储过程

通过 CALL语句调用连接器管理操作;支持 Paimon、Iceberg 等湖格式

DDL 新增 语法

  1. CREATE TABLE AS SELECT

  2. REPLACE TABLE AS SELECT

  3. 支持分区的增删查:ALTER TABLE ADD/DROP PARTITIONSHOW PARTITIONS table_name

新增时间旅行(Time Travel)语法

查询表在历史某个时间点的状态,语法:SELECT * FROM tbl FOR SYSTEM_TIME AS OF '2024-01-01 00:00:00'适用于 CDC、审计、回滚场景


3.2.2. 流处理(Streaming)

特性

说明

新特性

新增Table API 和 SQL 算子级别状态 TTL

Table API 和 SQL 用户可以为有状态的算子单独设置状态保留时间 (TTL),例如双流join时可以为两个算子设置不同的TTL

SQL Hint支持Watermark 对齐和空闲检测

使用 SQL Hint 配置Watermark对齐 和数据源空闲超时 。之前这些功能仅在 DataStream API 中可用(解决多个数据元join时,其中一个源长时间不产生数据拖慢全局任务的场景)


3.2.3. 批处理(Batch)

特性

说明

新特性

混合 Shuffle 支持远程存储

支持将 Shuffle 数据存储在远程存储中

新增TRUNCATE TABLE语法

新增在批处理模式下清空表数据语法:TRUNCATE TABLE db.table_name

改进和优化

批处理性能优化

  1. Runtime Filter,动态生成某些 join 查询的运行时过滤条件,以减少扫描或 Shuffle 的数据量

  2. 算子融合代码生成(Operator Fusion Codegen,通过将算子 DAG 融合成一个经过优化的单算子,消除了虚函数调用)进一步改进了 Flink 的批处理性能


3.2.4. 其他重要改进

特性

说明

新特性

动态 Task 并行度调整

运行时通过 Web UI 或 REST API 调整任意 Task 的并行度,无需重启作业

可插拔式故障处理

允许让用户采用自定义的故障处理机制介入到Flink的故障处理流程中

Java 17 支持

开始支持jdk17

API方式提交jar 修改jar 无感启停

4. Flink1.19

4.1. 总结

Flink1.19在经历1.17和1.18两个重大版本的演进后,在之前的基础上高度面向生产进行了增强,例如FlinkSQL的提升

4.2. 新特性与改进

特性

说明

新特性

源表支持自定义并行度

支持在 DDL 中直接设置 Source 的并行度,解决消费延迟

SQL Hint 支持配置状态 TTL

可在 SQL 中直接为 Join 或 Agg 设置状态存活时间,无需修改编译计划,简化 TTL 配置

函数与存储过程支持命名参数

调用 UDF 或存储过程时可使用命名参数,提升 SQL 灵活性

引入新的 UDF 类型:AsyncScalarFunction

提升 IO 密集型 UDF 的吞吐

Window TVF 支持 Session 窗口

  1. 支持在流模式下使用 Session Window TVF

  2. 支持处理更新流(例如CDC数据源)

改进和优化

Regular Join(常规双流join) 支持 MiniBatch 优化

为 Regular Join 采用 MiniBatch 机制:减少频繁状态访问

5. Flink1.20

5.1. 总结

Flink1.20版本是Flink2.0版本前的最后一个小版本,为了在2.0版本发布一些重量级的新功能,在1.20这个版本中完成了最小可行产品的开发,并且在1.19开始废弃过时的公共 API,并在1.20版本中正式启用多个即将在Flink2.0中停用的配置项,属于是承前启后的关键版本

5.2. 新特性与改进

特性

说明

新特性

物化表

通过定义查询语句和数据新鲜度,自动构建数据链路,简化流和批处理的数据加工链路,供一致的开发体验

支持 DISTRIBUTED BY

类似 Hive/Doris 的分桶概念, 控制 Sink 数据在外部系统(如 Kafka、Paimon)的分布,为未来 Bucket Join 奠定基础

新增catalog操作元数据语法

  1. 支持从现有 Catalog 中查询详细的元数据信息

  2. 支持使用 DDL语法修改指定Catalog 的属性或注释等元数据

引入统一的检查点文件合并机制

引入了统一的检查点文件合并机制, 支持将多个小 Checkpoint 文件合并为大文件,减少文件系统元数据压力

支持使用RocksDB API进行小文件合并

支持用户调用 RocksDB API 在后台合并小文件

HiveSource 支持动态并发推断

为 Hive 数据源连接器增加了对动态并发推断的支持,允许基于动态分区修剪的结果动态决定并行度。

全量分区数据处理

Flink 1.20 引入了 FullPartitionWindow API,支持DataStream 对非分区流进行全量的数据处理

架构演进

DataSet API 正式弃用

DataSetAPI 已正式弃用,并将在 Flink 2.0 版本中被删除

多个配置项正式弃用

  • 由于我们正在逐步淘汰基于哈希的 Blocking Shuffle,以下配置项已被弃用并将在 Flink 2.0 中被删除:

  • taskmanager.network.sort-shuffle.min-parallelism

  • taskmanager.network.blocking-shuffle.type

  • 由于我们正在逐步淘汰旧的Hybrid Shuffle 模式,以下配置项已被弃用并将在 Flink 2.0 中被删除:

  • taskmanager.network.hybrid-shuffle.spill-index-region-group-size

  • taskmanager.network.hybrid-shuffle.num-retained-in-memory-regions-max

  • taskmanager.network.hybrid-shuffle.enable-new-mode

  • 为了简化网络缓冲区相关配置,以下配置选项已被弃用并将在 Flink 2.0 中被删除:

  • taskmanager.network.memory.buffers-per-channel

  • taskmanager.network.memory.floating-buffers-per-gate

  • taskmanager.network.memory.max-buffers-per-channel

  • taskmanager.network.memory.max-overdraft-buffers-per-gate

  • taskmanager.network.memory.exclusive-buffers-request-timeout-ms (请使用 taskmanager.network.memory.buffers-request-timeout 代替)

  • 由于绝大多数批作业都会开启压缩,配置项 taskmanager.network.batch-shuffle.compression.enabled 已被弃用并将在 Flink 2.0 中被删除。如确有需要,请将 taskmanager.network.compression.codec 设置为 NONE以禁用压缩。

  • 以下与 Netty 相关的配置项过于底层,已在 Flink 1.20 被弃用,我们将在 Flink 2.0 中将其移除:

  • taskmanager.network.netty.num-arenas

  • taskmanager.network.netty.server.numThreads

  • taskmanager.network.netty.client.numThreads

  • taskmanager.network.netty.server.backlog

  • taskmanager.network.netty.sendReceiveBufferSize

  • taskmanager.network.netty.transport

  • 以下配置项是不必要的,已在 Flink 1.20 被弃用并且将在 Flink 2.0 中被删除:

  • taskmanager.network.max-num-tcp-connections(将在 Flink 2.0 中被硬编码为 1

  • fine-grained.shuffle-mode.all-blocking

  • 以下配置项用于微调 TPC 测试但当前 Flink 已不再需要,已被弃用并且将在 Flink 2.0 中被删除:

  • table.exec.range-sort.enabled

  • table.optimizer.rows-per-local-agg

  • table.optimizer.join.null-filter-threshold

  • table.optimizer.semi-anti-join.build-distinct.ndv-ratio

  • table.optimizer.shuffle-by-partial-key-enabled

  • table.optimizer.smj.remove-sort-enabled

  • table.optimizer.cnf-nodes-limit

  • 以下配置项是为现已过时的 FilterableTableSource 接口引入的,已被弃用并且将在 Flink 2.0 中被删除:

  • table.optimizer.source.aggregate-pushdown-enabled

  • table.optimizer.source.predicate-pushdown-enabled

  • 配置选项sql-client.display.max-column-width已被弃用并且将在 Flink 2.0 中被删除。请改用 table.display.max-column-width替代。

  • 更多信息

  • Runtime 相关配置项变更:https://issues.apache.org/jira/browse/FLINK-35461

  • Table/SQL 相关配置项变更:https://issues.apache.org/jira/browse/FLINK-35473

6. Flink2.0.0

6.1. 总结

Flink 2.x 系列的首个版本,在 2.0 版本中,Flink 引入了若干创新性功能,以应对实时数据处理的关键挑战,Flink 2.0 还对已弃用的 API 和配置进行了全面清理,这可能导致某些接口和行为出现向后不兼容的变化。升级到此版本的用户应特别注意这些变化,以确保顺利迁移。

6.2. 新特性与改进

特性

说明

存算分离

引入ForSt DB

For Streaming DB (起源于Rocks DB)

  1. 支持将状态后端存放在多种文件系统上,HDFS、S3、OSS等

  2. 支持并行多路 I/O 操作,批量读写、缓存,提升远程存储的读写能力

引入异步状态 API

支持对与无序的数据处理采用异步状态执行模型,减少延迟并提高资源利用率

部分SQL算子重构

借助新的异步状态访问 API,Flink 2.0 重新实现了一些关键的 SQL 算子,包括 Join 和 Aggregates 等有状态操作(例如,窗口聚合、分组聚合)。这些优化针对状态访问延迟比较大的场景,通过非阻塞式执行最大化吞吐量。

流批一体

物化表支持查询变更

物化表支持查询语句的更新,Flink自动重新处理历史数据

K8s/Yarn 原生支持物化表刷新

除了 Standalone 集群,Flink 2.0 对将物化表刷新作业(流更新模式、全量批更新模式、增量批更新模式)提交到 YARN 和 Kubernetes 集群进行了原生支持

自适应批处理新特性:自适应 Broadcast Join

与 Shuffle Hash Join 和 Sort Merge Join 相比,Broadcast Join 无需大规模数据重分布和排序,Flink 在运行时动态捕获 Join 算子的实际输入情况,并在满足条件时自动切换到 Broadcast Join

自适应批处理新特性:自动优化数据倾斜的 Join

Flink 现在可以利用 Join 算子输入边的运行时统计信息,动态拆分出倾斜的数据分区,同时确保计算结果的完整性。这有效缓解了由数据倾斜引起的长尾延迟。

流式湖仓

支持对嵌套的字段进行下推

支持对数据湖中的嵌套的字段进行下推,在复杂数据结构的场景中可以减少了 IO 开销

Paimoin Lookup Join 优化

paimon作为维度表时,通过将输入数据的分布与 Paimon 表的分桶机制对齐,减少了每个 Lookup join 任务需要从 Paimon 检索、缓存和处理的数据量

Flink 支持 Paimon 的维护性操作

所有 Paimon 的维护性操作(如 Compaction、管理快照/ 分支/ 标签等)现在都可以通过 Flink SQL 的 CALL 语句轻松执行,并且支持命名参数,可以与任何可选参数的子集一起使用。

物化表支持

Paimon 的湖存储格式原生支持 Flink 物化表

人工智能

AI模型 Catalog

允许用户像定义 Catalog 一样轻松定义人工智能模型,并在 SQL 语句中像函数或表函数一样调用它们。

Flink CDC 调用大模型

Flink CDC 3.3 版本在 Transform表达式中引入了动态调用人工智能模型的能力,原生支持 OpenAI 模型

架构演进

API 移除

正式移除了:DataSet API、Scala DataStream 和 DataSet API、SourceFunction、SinkFunction 和 Sink V1、TableSource 和 TableSink、TableSchema、TableColumn 和 Types等

移除 per-job 部署模式

不再支持 Per-Job 部署模式,请改用 Application 模式

Java 支持21

从 2.0 版本开始,Flink 正式支持 Java 21,默认和推荐的 Java 版本已更改为 Java 17(此前为 Java 11)。同时,Flink 2.0 不再支持 Java 8

引入DataStream V2 API

新的 DataStream V2 API 目前处于实验阶段,尚不稳定,因此目前不建议在生产环境中使用。

7. Flink2.1.0

7.1. 总结

7.2. 新特性与改进

特性

说明

Flink SQL 新特性

支持 Process Table Functions(PTFs)

PTF 是所有 UDF 的“超集”,能够将零个、一个或多张表映射为零个、一个或多行数据,借助 PTFs,你可以实现与内置算子一样功能丰富的自定义算子,并直接访问 Flink 的托管状态、事件时间、定时器以及表级变更日志。

新增 VARIANT 半结构化数据类型

支持存储任意嵌套结构(包括基本类型、ARRAYMAP)并保留原始类型信息。相比 ROWSTRUCTURED 类型,VARIANT 在处理动态 Schema 数据时更灵活。配合 PARSE_JSON 函数及 Apache Paimon 等表格式,可实现湖仓中半结构化数据的高效分析。

支持声明Structured 类型

Flink SQL支持在 CREATE TABLE 语句中直接声明用户定义结构体类型

引入Delta Join

引入一种新的 DeltaJoin 算子,相比传统的双流 Join 方案,配合 Apache Fluss 等流存储,可以实现 Join 算子无状态化,解决了大状态导致的资源瓶颈、检查点缓慢和恢复延迟等问题。该特性已默认启用,同时需要依赖 Apache Fluss 存储相应版本支持,

Keyed State 连接器

为 Keyed State 引入了一个新的 SQL 连接器。该连接器允许用户使用 Flink SQL 直接查询Checkpoint 和 Savepoint 中的 Keyed State,从而使得更容易探查、调试和验证 Flink 作业状态

支持 DDL 定义AI模型

支持通过 Table API(Java/Python) 定义模型,通过编程实现模型的灵活管理

实时AI函数

扩展了 ML_PREDICT 表值函数(TVF),支持在 Flink SQL 中实时调用机器学习模型,提供内置兼容 OpenAI API 的模型调用支持,同时开放自定义模型接口

其他重要改进

异步 Sink 可插拔的批量处理

支持自定义批量写入策略,用户可根据业务需求灵活扩展异步 Sink 的批量写入逻辑。

新增细粒度分片监控指标

涵盖水位线进度与状态统计:

  • currentWatermark:该分片最新接收到的水位线值

  • activeTimeMsPerSecond:该分片每秒处于数据处理状态的时间(毫秒)

  • pausedTimeMsPerSecond:因水位线对齐该分片每秒的暂停时间(毫秒)

  • idleTimeMsPerSecond:每秒空闲时长(毫秒)

  • accumulatedActiveTimeMs:累计活跃时长(毫秒)

  • accumulatedPausedTimeMs:累计暂停时长(毫秒)

  • accumulatedIdleTimeMs:累计空闲时长(毫秒)

8. 版本建议

https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.12/zh/docs/concepts/overview/

https://mp.weixin.qq.com/s/pYM88GuEsvWDcS21RnYj1w

https://mp.weixin.qq.com/s/-AwXJz9CqEeX7cRdGGdyIg

https://flink-learning.org.cn/article/detail/8373ef73bf8b3f649ad649e32c00dc5a

https://help.aliyun.com/zh/flink/april-13-2023?spm=a2c4g.11186623.help-menu-45029.d_0_2_0_18.123f77828fvgMI

https://help.aliyun.com/zh/flink/dynamically-update-deployment-parameters?spm=a2c4g.11186623.0.0.6ed9705bPw79t4

https://help.aliyun.com/zh/flink/august-21-2023?spm=a2c4g.11186623.help-menu-45029.d_0_2_0_16.74b5705bZB6LWr&scm=20140722.H_2514195._.OR_help-T_cn~zh-V_1

https://cloud.tencent.com/document/product/849/58738

8.1. 新特性&性能对比

  1. 批处理:Flink 2.1 相比 Flink 1.20 通过自适应批处理执行功能(自适应 Broadcast Join自动优化数据倾斜的 Join),综合实现了 8% 的性能提升

  2. 流处理:通过新引入的MultiJoin 算子DeltaJoin 算子等新特性提升了流处理时的性能和吞吐量

  3. 分离式状态后端:结合异步执行模型,分离式状态存储的性能比本地状态存储平均不低于 10%

8.2. 参考目前各云厂商

云服务提供商

实时计算产品名称

Flink 版本

阿里云

实时计算Flink版(2025年8月)

1.20.2

腾讯云

流计算Oceanus(2025年7月)

1.20

火山引擎

流式计算 Flink版(2025年8月)

1.17

亚马逊云

Amazon MSF

1.20.0

8.3. Flink发布时间线

版本

发布日期

备注

flink-1.20.0

2024-08-01

  1. FLIP-458 中指出Flink 1.20 作为最后的 1.x 版本被指定为长期支持版本(LTS) 。

  2. 预计维护时间为两年从2024-08-01 Flink1.20.0 版本发布开始算大约还会维护一年时间

flink-1.20.1

2025-02-11

-

flink-1.20.2

2025-07-07

-

flink-2.0-previewl

2024-10-22

-

flink-2.0.0

2025-03-18

-

flink-2.1.0

2025-07-29

Flink 2.1.0 是 目前的稳定版本(stable)

8.4. 版本选择建议

评估维度

Flink 1.20.2

Flink 2.1.0

稳定性

较高,LTS版本,到1.20.2累计修复90+bug和改进

高,但较新,更专注于新功能的发布,稳定性需生产环境进一步检验

社区支持

主流云厂商的选择,生态兼容性更好,多数第三方组件兼容的最高版本,开发无障碍

部分连接器可能不兼容,生态仍在适配中(Doris Connector不支持

升级成本

从零搭建,但未来从1.20升级至2.x需要成本

从零搭建,无历史包袱

总结:从服务稳定性、社区支持以及结合当前公司现状的角度看 选择 Flink 1.20.2 是目前更稳健的选择,也足够满足绝大部分场景



8.6. 自动化发版

  1. 基于特性:Flink1.11开始支持的Cancel with Savepoint(即触发Savepoint后优雅停止作业)

  2. 实现手段:

  1. 用户可以选择触发或者不触发save point将任务暂停

  2. 从save point/checkpoint 或者 无状态启动新作业

8.7. 弹性扩缩容

  1. 基于特性:Flink1.18开始支持的:通过REST API 动态调整Task的并行度

  2. 实现手段:

  1. 用户通过手动调用REST API 动态修改Task的并行度可以实现不停机的动态调整

  2. 弹性扩缩容目前是指动态调整每个 任务节点 的并行度以提高集群资源利用率

https://github.com/apache/flink-kubernetes-operator

https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.12/zh/docs/concepts/overview/

https://developer.aliyun.com/article/1380944

Flink Kubernetes Operator 是 Flink 社区开发并开源的子项目,是 Flink 与 Kubernetes 原生集成的核心组件。它扩展了 Kubernetes API,让用户能像创建 Pod 或 Deployment 一样,通过一个自定义资源(FlinkDeployment)来描述一个 Flink 作业的期望状态(例如镜像、并行度、状态后端等)。Operator 会持续监听这些自定义资源,并自动执行创建、升级、扩缩容乃至故障恢复等运维操作,将复杂的 Flink 集群管理流程自动化。当前最新版本最高支持Flink1.20

8.8.1. 核心功能

Job Management (作业管理)


声明式部署

用户通过编写 FlinkDeploymentFlinkSessionJob YAML 文件来定义作业的期望状态。自动创建、启动、监控和故障恢复 Flink 作业。

故障恢复

当 JobManager 或 TaskManager Pod 崩溃时,自动重启并从最近的 Checkpoint 恢复作业。

无中断升级

支持 savepoint, last-state, stateless 升级模式,在更新代码、配置或资源时,保证作业状态不丢失,实现生产环境的平滑升级。

Autoscaler (自动扩缩容)

手动扩缩容

用户手动指定Task的并行度

基于作业指标自动扩缩容

根据作业的实时负载(如处理延迟、反压、CPU 使用率)自动增加或减少算子的并行度 (Parallelism)。

8.8.2. 配置模板

# API 版本,指定使用 Flink Operator 的 v1beta1 版本
apiVersion: flink.apache.org/v1beta1
# 资源类型:FlinkDeployment,表示这是一个 Flink 应用部署
kind: FlinkDeployment
# 元数据,包含命名空间和名称
metadata:
  # 指定该 Flink 部署所在的 Kubernetes 命名空间
  namespace: default
  # 该 Flink 部署的唯一名称
  name: pod-template-example
# 部署的具体配置
spec:
  # Flink 镜像地址,指定运行的 Flink 容器镜像
  image: flink:1.20
  # 明确声明使用的 Flink 版本,用于 Operator 内部逻辑判断(如升级、扩缩容)
  flinkVersion: v1_20
  # Flink 运行时的配置参数(等同于 flink-conf.yaml 中的配置)
  flinkConfiguration:
    # 设置每个 TaskManager 的 Slot 数量为 2
    # Slot 是 Flink 并行执行的基本单位,一个任务子任务(subtask)占用一个 Slot
    taskmanager.numberOfTaskSlots: "2"
  # 指定运行 Flink Pod 所使用的 Kubernetes ServiceAccount
  # 用于权限控制,如访问 Kubernetes API、Secrets 等
  serviceAccount: flink
  # Pod 模板:定义 JobManager 和 TaskManager Pod 的通用配置
  podTemplate:
    spec:
      containers:
        # 主容器(必须保留此名称,Operator 依赖此名称管理主进程)
        - name: flink-main-container
          # 容器内挂载的卷,用于共享数据或日志
          volumeMounts:
            # 将名为 flink-logs 的卷挂载到容器内的 /opt/flink/log 路径
            - mountPath: /opt/flink/log
              name: flink-logs
        # 示例:Sidecar 容器(辅助容器),用于日志收集
        - name: fluentbit
          # 使用 Fluent Bit 镜像收集日志
          image: fluent/fluent-bit:1.8.12-debug
          # 启动命令:使用 Fluent Bit 监控 /flink-logs/ 目录下的日志文件,并以 Java 多行模式解析堆栈信息
          command: [ 'sh','-c','/fluent-bit/bin/fluent-bit -i tail -p path=/flink-logs/*.log -p multiline.parser=java -o stdout' ]
          # 挂载同一个日志卷,使 Fluent Bit 能读取主容器的日志
          volumeMounts:
            - mountPath: /flink-logs
              name: flink-logs
      # 定义 Pod 内使用的卷
      volumes:
        # 定义一个名为 flink-logs 的临时卷,生命周期与 Pod 相同
        # 数据存储在节点内存中,Pod 删除后数据丢失
        - name: flink-logs
          emptyDir: { }
  # JobManager 的资源配置
  jobManager:
    resource:
      # JobManager 容器的内存资源请求和限制
      memory: "2048m"
      # JobManager 容器的 CPU 资源请求和限制
      cpu: 1
  # TaskManager 的资源配置
  taskManager:
    resource:
      # 每个 TaskManager 容器的内存资源
      memory: "2048m"
      # 每个 TaskManager 容器的 CPU 资源
      cpu: 1
    # TaskManager 特有的 Pod 模板(可覆盖通用 podTemplate)
    podTemplate:
      spec:
        # Init Containers:在主容器启动前运行的初始化容器
        initContainers:
          # 示例:一个 BusyBox 初始化容器
          - name: busybox
            # 使用 BusyBox 镜像(轻量级 Linux 工具集)
            image: busybox:1.35.0
            # 执行命令:打印一条日志,表示 TaskManager 初始化开始
            command: [ 'sh','-c','echo hello from task manager' ]
  # 作业(Job)相关配置
  job:
    # 指定作业 JAR 包的位置
    # local:// 表示 JAR 包已内置在镜像中(路径为容器内路径)
    jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
    # 作业的并行度,即作业中算子的总任务数(由 JobManager 分配到 TaskManager 的 Slot 中)
    parallelism: 2 

0

评论区