近日,Apache Flink 社区正式宣布了一项重要更新:在 Native-Kubernetes 的应用模式(Application Mode)中,用户现在可以更为灵活地提供额外的附加工件(Additional Artifacts)。这一改进直击云原生流处理场景中的核心痛点,为大规模作业部署提供了更强大的支持。
背景:从 Session 到 Application 的演进
Apache Flink 作为业界领先的流批一体计算引擎,其与 Kubernetes 的深度集成一直是社区重点方向。Native-Kubernetes 模式使得 Flink 作业能够直接与 K8s API 交互,自动创建和管理 Pod、Service 等资源。其中,Application Mode 因每个作业拥有独立的集群、资源隔离性强、生命周期与作业绑定,成为生产环境的首选部署方式。
然而,在实际应用中,用户常常需要将自定义的 UDF(用户自定义函数)、外部连接器(如 Kafka、JDBC 驱动)、配置文件、依赖库等作为“附加工件”上传到 Flink 集群。这些工件并非作业主 jar 的组成部分,但在运行时不可或缺。此前,在 Native-Kubernetes Application Mode 下,附加工件的管理存在诸多限制:用户只能通过固定的本地路径或简单的 HTTP 协议引用,无法充分利用 Kubernetes 的存储生态系统(如 PVC、ConfigMap、对象存储等),导致部署流程复杂且难以自动化。
新特性:灵活的多来源工件注入
本次升级的核心在于,Flink 的 Native-Kubernetes 运行时现在支持通过 多种来源注入附加工件,包括:
- 本地文件系统:支持从宿主机或 Pod 内共享路径加载。
- HTTP/HTTPS 端点:可通过 URL 动态下载 JAR 或配置文件。
- 对象存储:如 S3、OSS、GCS 等,直接指定存储桶路径。
- Kubernetes ConfigMap 和 Secret:可将配置数据挂载为 Flink 可访问的路径。
- 持久卷声明(PVC):适用于需要持久化存储的场景,如大型模型文件。
这一机制通过 Flink 的 pipeline.jars 和 pipeline.classpaths 配置项扩展而来,用户只需在作业提交时声明工件的类型与位置,Flink 会自动完成下载、校验、挂载至 TaskManager 等步骤。例如:
spec:
flinkConfiguration:
pipeline.classpaths: "s3a://my-bucket/udf/lib.jar, /etc/flink/extra/config.yaml"
podTemplate:
spec:
volumes:
- name: shared-libs
persistentVolumeClaim:
claimName: flink-libs-pvc
技术实现:无损的 classpath 管理
在架构层面,Flink 团队对 Application Mode 下的资源生命周期进行了重新设计。以往,附加工件仅在 JobManager 启动时加载;现在,每个 TaskManager Pod 在启动时会从 Flink 集群的共享存储中拉取声明过的工件,并合并到运行时的 classpath 中。这一过程完全依赖 Kubernetes 的 Init Container 实现,保证了主容器启动前所有依赖就绪,且不增加主进程的启动负担。
同时,Flink 社区引入了对 工件元数据 的校验机制:如果某个附加工件在多个作业间冲突或版本不一致,系统会给出明确警告。这种设计既保留了灵活性,又避免了 classpath 污染带来的运行错误。
实践价值:降低运维复杂度,加速 CI/CD
对于平台运维团队而言,这一特性意味着不再需要在基础镜像中预装所有依赖。用户可以将自定义连接器、业务 jar 等放在独立的对象存储或持久卷中,按需挂载。这使得 Flink 基础镜像可以保持极简,符合云原生“不可变基础设施”的最佳实践。
在 CI/CD 场景中,开发团队可以直接通过 Kubernetes API 提交带有附加工件的作业,而无需修改 Dockerfile 或重新构建镜像。例如,将最新版本的 UDF jar 自动上传至 S3,再由 Flink 作业声明引用,大大缩短了迭代周期。
未来展望:向更开放的生态迈进
此次更新是 Flink 社区在“Kubernetes 原生”方向上迈出的重要一步。据 Flink PMC 成员透露,后续计划将进一步支持动态 classpath 热加载,以及基于 Operator 的工件生命周期管理。届时,用户甚至可以在作业运行时动态添加或替换附加工件,而无需重启集群。
目前,该特性已集成至 Flink 1.17 及以上版本,并可通过 Flink Kubernetes Operator 1.7+ 使用。建议用户升级至最新版本,并参考官方文档中的《Native-Kubernetes Application Mode Artifacts Guide》进行配置。
随着云原生流处理需求的不断增长,Flink 对 Kubernetes 生态的深度适配,正在为企业级实时计算提供更接近“开箱即用”的体验。而附加工件管理的突破,正是这一趋势下的又一重要里程碑。