Flink on k8s的使用方式哪些?
在 Kubernetes (K8s) 上运行 Apache Flink,目前主要有以下几种使用方式。我们可以从架构管理模式(资源层面)、作业生命周期(运行模式)以及运维部署工具三个维度来进行划分:
一、 核心架构模式(按 Flink 是否感知 K8s 划分)
这是最底层的两种资源交互方式:
1. Native Kubernetes 模式(原生集成模式,推荐)
- 原理:Flink 的 JobManager 直接与 K8s 的 API Server 通信。Flink 能够感知 K8s 的存在,并根据作业需求动态创建和销毁 TaskManager Pod。
- 优点:
- 弹性伸缩:资源按需分配,作业结束自动释放 Pod,资源利用率极高。
- 配置简单:不需要预先规划 TaskManager 的数量。
- 缺点:JobManager 需要配置具备操作 K8s Pod 权限的 RBAC (ServiceAccount)。
2. Standalone on K8s 模式(独立集群模式)
- 原理:将 K8s 仅仅当作“虚拟主机”使用。通过手写 K8s 的 Deployment/Service 资源清单,静态启动一个固定数量 TaskManager 的 Flink 集群。Flink 本身不知道自己运行在 K8s 上。
- 优点:不需要给 Flink 授予 K8s API 的访问权限(安全限制极严的环境可用)。
- 缺点:无法动态伸缩,资源容易浪费或不足;需要手动管理 TaskManager 的副本数。
二、 作业运行模式(按生命周期划分)
在 Native 模式下,通常支持以下两种运行模式(旧版的 Per-Job 模式在 Flink 1.15+ 已被废弃):
1. Native Application 模式(生产环境首选)
- 工作机制:每个 Flink 作业独占一个集群。客户端将作业的 Jar 包和依赖打包进 Docker 镜像(或挂载),作业的
main()方法在 K8s 内部的 JobManager 上执行。 - 优点:
- 强隔离性:作业之间 CPU、内存完全隔离,互不影响。
- 轻客户端:客户端无需下载依赖和生成 JobGraph,节省客户端网络带宽,非常适合 CI/CD 流程。
- 适用场景:长期运行的流处理生产作业。
2. Native Session 模式(会话模式)
- 工作机制:预先在 K8s 上启动一个长期运行的 Flink 集群(常驻 JobManager)。多个作业提交到同一个集群中运行,共享集群资源。TaskManager 依然是动态申请的。
- 优点:作业提交非常快(不需要重新启动 JM 和申请基础资源)。
- 缺点:隔离性差。一个作业发生致命错误可能影响 JM,进而影响整个集群的其他作业;依赖冲突风险高。
- 适用场景:短平快的小作业、临时 Ad-hoc 查询、测试和开发环境。
三、 具体的部署与运维工具(实践层面)
在日常使用中,通常会通过以下工具来落地 Flink on K8s:
1. Flink Kubernetes Operator(官方标准,终极推荐)
- 介绍:Apache 官方推出的 Kubernetes Operator(基于 CRD Controller 机制)。
- 使用方式:定义一个自定义资源(CRD)如
FlinkDeployment的 YAML 文件,声明 Flink 版本、镜像、作业参数等,由 Operator 自动管理集群生命周期。 - 核心优势:
- 声明式管理:完全契合云原生 GitOps 理念。
- 高级特性:原生支持自动化保存点(Savepoint)、自动作业升级(平滑迁移)、故障自动恢复。
- 自动扩缩容:内置并集成了 Flink Autoscaler,可根据流量指标自动伸缩并发度。
2. Flink Native CLI 命令行
- 介绍:通过官方提供的
flink run-application -t kubernetes-application命令直接提交。 - 使用方式:在装有
kubectl并具备 K8s 访问权限的机器上,直接敲 Flink CLI 命令,Flink 会自动向 K8s 申请资源拉起作业。 - 适用场景:编写自动化 Shell 脚本、结合 Jenkins 等传统 CI/CD 工具使用。
3. 社区开源管理平台(带 Web UI)
如果你需要对团队内部提供可视化的多租户管理界面,可以使用基于 Flink on K8s 封装的平台:
- Streampark:国人主导的顶级孵化项目,非常优秀的流计算开发运维平台,深度支持 Flink on K8s(Application 模式及 Operator 模式),提供全 Web 化操作、监控告警、状态管理。
- Dinky:类似 Streampark,专注于 Flink 敏捷开发、SQL 提交及元数据管理的平台,同样支持 K8s 部署模式。
4. Helm Charts
- 适合用来快速部署 Standalone 模式的 Flink 集群或部署 Flink Kubernetes Operator 本身。
四、 选型建议(总结)
| 场景需求 | 推荐使用方式 |
|---|---|
| 现代生产环境(流作业) | Flink Kubernetes Operator + Native Application 模式(最稳定、云原生、支持自动扩缩容) |
| 开发 / 测试 / 数据探索 | Native Session 模式(启动快,节省开销) |
| 希望拥有类似云厂商的 Web 管理控制台 | Streampark 或 Dinky(配合底层 K8s 引擎) |
| K8s 权限管控极其严格(无 API 权限) | Standalone 模式(通过固定 Deployment 部署) |
右滑查看面试常问